leetcode题目:环形子数组的最大和
参考优秀题解,加以注释,便于理解,供自己参考。
package leetcode;
class ceshi { public static int maxAraylist(int[] nums) { int max=nums[0];//最大子序列和 int sum=nums[0];//数组和 int iv=nums[0];//中间变量,用来存储循环过程中的最大值或最小值。 for(int i=1;i<nums.length;i++){ sum+=nums[i];//求出整个数组总和 if(iv>=0){//如果Max大于0,那么就加上下一个数组元素,否则就用下一个数组元素覆盖原Max值。 iv=iv+nums[i]; } else{ iv=nums[i]; } if(iv>max){//更新最大子序列和 max=iv; } } int min=0; iv=nums[0]; for(int i=1;i<nums.length-1;i++)//若最大子序列和要在环形数组中取得,说明数组第一项和最后一项肯定为正数;并且第二项到倒数第二项存在最小负数和。 { if(iv<0){//求出最小子序列和 iv=iv+nums[i]; } else{ iv=nums[i]; } if(iv<min){ min=iv; } } if((sum-min)<max){//判断最大序列和 max=max; } else max=sum-min; System.out.print(max); return max; }
public static void main(String[] args){
int nums[]={1,2,3,-5,-2,-7,3};
maxAraylist(nums);
}
}
|