给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
输入:nums = [1]
输出:1
示例 3:
输入:nums = [5,4,-1,7,8]
输出:23
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
遍历nums,如果发现有一个子数组的和<0,那么之后的数组不应该包含它,因为此时的它会只会造成负面效果。
定义一个tem变量来存储子数组的和,如果tem < 0;tem重新赋值为0;意味着舍弃了之前的子数组。
再定义一个max来存储遍历过程中子数组的最大值,遍历结束后的max就是答案。
代码如下:
1 class Solution { 2 public int maxSubArray(int[] nums) { 3 //int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4}; 4 int max = nums[0]; 5 int tem = 0; 6 for (int num : nums) { 7 tem += num; 8 max = Math.max(tem, max); 9 if (tem <= 0) { 10 tem = 0; 11 } 12 } 13 return max; 14 } 15 }
运行结果如下:
标签:---,tem,nums,int,max,示例,53,力扣,数组 From: https://www.cnblogs.com/allWu/p/16987669.html