7.3 MaxDoubleSliceSum

来源:互联网 发布:规模以上 知乎 编辑:程序博客网 时间:2024/05/02 06:07

求两相邻子数组和最大,两端是开区间。
这道思索了很久,觉得解法没问题但是性能测试只有两个通过。
有两个因素影响最大值,两端的边界及切分的位置。边界扫描的同时在段内调整slice位置保证maxL+maxR的和最大。策略是以右边界扫描为主,maxR+A[i-1]<0及A[slice]>A[i-1]时调整slice。
但是为什么不对呢??

class Solution {    public int solution(int[] A) {        int max = 0;        int maxL = 0;        int maxR = 0;        int slice = 1;        for(int i=3; i<A.length; i++){            if(maxR+A[i-1]>0){                if(A[slice]>A[i-1]){                    maxL = Math.max((maxL+A[slice]+maxR),maxR);                    maxR = 0;                    slice = i-1;                }                else{                    maxR += A[i-1];                }            }            else{                maxL = Math.max((maxL+A[slice]+maxR),maxR);                maxR = 0;                slice = i-1;            }            max = Math.max(max,(maxL+maxR));        }        return max;           }}
0 0
原创粉丝点击