classSolution{publicintmaxSubArray(int[] nums){if(nums==null || nums.length ==0){return0;}int ans = Integer.MIN_VALUE;int sum =0;//根据题意,如果前i位(包含第i位)相加<0,那么舍弃前i位,但是每次相加都要进行最大值判断。//思路就是只要当前位置i对应的nums[i] + sum < 0,说明应将sum = 0;for(int i =0;i<nums.length;i++){//sum表示当前位置i之前子数组的和,包含当前i
sum += nums[i];
ans = Math.max(ans,sum);if(sum<0){
sum =0;}}return ans;}}
可能更好理解
classSolution{publicintmaxSubArray(int[] nums){if(nums==null || nums.length ==0){return0;}int ans = Integer.MIN_VALUE;int sum =0;for(int i =0;i<nums.length;i++){//sum表示前i位的和if(sum <0){
sum =0;}
sum += nums[i];
ans = Math.max(ans,sum);}return ans;}}