java

一个比较实用&简单的思想

分析得:

  • 题目的意思其实是求最大连续子序列 求最大子序列有一个规则: 负数和任何数相加只会越来越小
  • a[] = {-1,1,3,-20,4,-1,4}
  • 时间复杂度为O(n)

解法一

public int FindGreatestSumOfSubArray(int[] array) {
        int length = array.length;
        int max = array[0];  //设最大的子序列为 a[0]
        int newMax = array[0];  //记录新的子序列的和
        for (int i = 1; i < length; i++) {    //a[] = {-1,1,3,-20,4,-1,4}
            if (newMax < 0) {             
                newMax = 0;     //判断子序列如果小于0  则从下一个位置开始计算最大值   例如:第一个数为a[0]=-1 则从a[1]开始计算
            }
            newMax += array[i];   //子序列的和
            if (newMax > max) {  
                max = newMax;
            }
        }
        return max;
    }

解法二: 一个比较常规的方法

遍历数组, 记录每一种可能
时间复杂度O(N^2)

    public int FindGreatestSumOfSubArray(int[] array) {
        int length = array.length;
        int max = array[0];
        for (int i = 0; i < length; i++) {   //记录其实位置
            int temp = 0;
            for (int j = i; j < length; j++) {  //从起始位置开始往后累加  记录每一次的结果  然后和最大值比较
                temp += array[j];
                if (temp > max) {
                    max = temp;
                }
            }
        }
        return max;
    }