时间复杂度为 比狗n , 具体思路是:遍历一边数组元素
在遍历的同时,依次求和,若在当前位置求的和为负数,则舍弃,从下一个位置,重新开始,继续求和。在遍历求和的过程中,要比较当前位置和与最大值的比较,更新最大值。
/**
* 找到一个序列中,连续元素和的最大值 时间复杂度 为 O(n)
*/
public class ContinusSequence {
public static void main(String[] args) {
int[] a = new int[]{1, 2, -5, 3, 4, -9, 3,1,0};
System.out.println(findContinusMax(a));
}
public static int findContinusMax(int[] input) {
int len = input.length;
int max = input[0],maxhere = max;
for (int i = 1; i < len; i++) {
if (maxhere < 0) {
maxhere = input[i];
}else{
maxhere = maxhere + input[i];
}
if (maxhere > max) {
max = maxhere;
}
}
return max;
}
}