首页 > 其他分享 >力扣---918. 环形子数组的最大和

力扣---918. 环形子数组的最大和

时间:2022-12-16 19:23:19浏览次数:46  
标签:力扣 tem nums int max --- 918 数组 最大

给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和 。
环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i + 1) % n] , nums[i] 的前一个元素是 nums[(i - 1 + n) % n] 。
子数组 最多只能包含固定缓冲区 nums 中的每个元素一次。形式上,对于子数组 nums[i], nums[i + 1], ..., nums[j] ,不存在 i <= k1, k2 <= j 其中 k1 % n == k2 % n 。

示例 1:
输入:nums = [1,-2,3,-2]
输出:3
解释:从子数组 [3] 得到最大和 3


示例 2:
输入:nums = [5,-3,5]
输出:10
解释:从子数组 [5,5] 得到最大和 5 + 5 = 10

示例 3:
输入:nums = [3,-2,2,-3]
输出:3
解释:从子数组 [3] 和 [3,-2,2] 都可以得到最大和 3

提示:
    n == nums.length
    1 <= n <= 3 * 104
    -3 * 104 <= nums[i] <= 3 * 104​​​​​​​

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-sum-circular-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本题和https://www.cnblogs.com/allWu/p/16987669.html这道题的区别在于多了一个首尾相接的条件。

共有两种可能:1. 最大子数组没有用到首尾相接这个条件

                         2. 最大子数组用到了收尾相接这个条件

对第一种情况来说,答案和https://www.cnblogs.com/allWu/p/16987669.html这道题的答案一样。

对第二种情况来说,意味着最小子数组没有用到这个条件。此时,最大子数组等于元素之和减去最小子数组的元素和。

如果数组所有的元素都为负数,那么最大子数组的和必定为负数,此时直接返回最大子数组的和即可。

代码如下:

 1 class Solution {
 2     public int maxSubarraySumCircular(int[] nums) {
 3         //int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
 4         int max = nums[0];
 5         int tem = 0;
 6         int numAdd = 0;
 7         for (int num : nums) {
 8             numAdd += num;
 9             tem += num;
10             max = Math.max(tem, max);
11             if (tem <= 0) {
12                 tem = 0;
13             }
14         }
15         if (max <= 0) {
16             return max;
17         }
18         int min = nums[0];
19         for (int num : nums) {
20             tem += num;
21             min = Math.min(tem, min);
22             if (tem >= 0) {
23                 tem = 0;
24             }
25         }
26         return Math.max(max, numAdd - min);
27     }
28 }

运行结果如下:

运行结果

 

标签:力扣,tem,nums,int,max,---,918,数组,最大
From: https://www.cnblogs.com/allWu/p/16988143.html

相关文章

  • dnmp 运行多PHP版本--PHP74安装支持swoole,kafka, redis
    官方文档:https://github.com/yeszao/dnmp本身默认PHP7.1版本如果需要同时支持多个版本PHP,需要另外在配置下面举例子配置多个PHP版本--PHP7.4dnmp/service目录下......
  • PHP加密解密案例--Crypt
    加密解密代码如下/***加密字符串*@paramstring$str字符串*@paramstring$key加密key*@paraminteger$expire有效期(秒)......
  • vue3中使用vite-ts构建项目时tsconfig.json的配置
    在上一次创建vue3项目在tsconfig.json中配置了文件别名以后,格式校验提示   es3什么鬼,便去看了一下tsconfig.json的配置,以此学习{"compilerOptions":{......
  • 线上导出csv出现失败-网路错误
    一次,在线上后台导出了比平时多几倍的数据,发现导出了部分之后停止了,出现失败-网络错误的提示:导出的核心代码是这样的set_time_limit(0);ini_set('memory_limit','2......
  • 企业级自定义表单引擎解决方案(十八)--列表视图属性设置
    表格对于后台管理类的系统来说,至关重要,系统大多数功能都需要以表格的方式展示业务内容,系统开发人员多数时间也是围绕着表格进行业务编码,接触过很多后台管理系统的框架,我个......
  • Web Serial Debug-浏览器串口调试工具
    WebSerialDebug浏览器串口调试工具仅测试了Edge和Chrome浏览器,其他浏览器未测试是否可用在线体验:https://itldg.github.io/web-serial-debug/国内体验:https......
  • Sentinel - 规则持久化
    1.Sentinel规则推送模式Sentinel规则的推送有下面三种模式:推送模式说明优点缺点原始模式API将规则推送至客户端并直接更新到内存中,扩展写数......
  • 【五期邵润东】CCF-A(S&P'22)SHADEWATCHER: Recommendation-guided Cyber Threat Anal
    Zeng,Jun,etal."SHADEWATCHER:Recommendation-guidedCyberThreatAnalysisusingSystemAuditRecords."2022IEEESymposiumonSecurityandPrivacy(SP).IE......
  • 记录--三分钟打造自己专属的uni-app工具箱
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助介绍可曾想过我们每次创建新项目,或者换地方写程序,都要把之前写过的工具类找出来又要复制粘贴一遍有些麻......
  • C#高级--Expression详解
    C#高级–Expression详解零、文章目录一、Expression是什么1、如何定义Expression<Func<TSource,bool>>就是表达式目录树Expression不能带有大括号,只能有一行代码2、和委托......