算法复习3——连续子数组的最大和

  • 使用滑动窗口法:

    重点:需要存储当前滑动窗口的和,如果<=0,就不需要在它的基础上加上当前值

    public int FindGreatestSumOfSubArray(int[] array) {
            //滑动窗口法:
            if(array==null || array.length==0)
                return -1;
            int max=Integer.MIN_VALUE;//存储最大值,初始化为极小值
            int tempSum=0; //当前滑动窗口的和
            for(int i=0;imax)
                    max=tempSum;
            }
            return max;
    }
  • 易错点:(上面的tempSum就是此处的preSum),preSum的更新基于最大值,这种思路是错误的!!!

    public int FindGreatestSumOfSubArray(int[] array) {
        //动态规划法
        if(array==null || array.length==0)
                return -1;
        int preSum=0;//前一次的结果
        int realSum=Integer.MIN_VALUE;//后一次的结果
        for(int i=0;i

    原因分析:最大和的更新基于上次的最大和,但是上次的最大和与array[i]之间不一定连续,也就是说直接相加可能会跳过中间的一些值。

    示例:数组[1,-5,5] 错误方案求出的最大和是6,实际结果应该是5

你可能感兴趣的:(java)