求数组中,子数组合的最大值

来源:互联网 发布:linux 创建home目录 编辑:程序博客网 时间:2024/06/07 17:38

可以考虑动态规划,如当前和小于等于0,则下一个数从新开始计算,保存当前的最大值。

int FindGreatestSumOfSubArray(vector<int> array) {
        if(array.empty())return 0;
        intsum = array[0], tempsum = array[0]; //注意初始值 不能设为0 防止只有负数
        for(inti = 1; i < array.size(); i++) //从1开始 因为0的情况在初始化时完成了
        {
            tempsum = (tempsum < 0) ? array[i] : tempsum + array[i];
            sum = (tempsum > sum) ? tempsum : sum;
        }
        returnsum;
    }
还可
    int FindGreatestSumOfSubArray(vector<int> array) {
        if(array.size()==0)
            return 0;
        int curSum=0;
        int nMaxSum=0x80000000;
        for(int i=0;i<array.size();i++){
            if(curSum<=0)
                curSum=array[i];
            else{
                curSum += array[i];
            }
            if(curSum>nMaxSum)
                nMaxSum=curSum;
        }
        return nMaxSum;
    }

原创粉丝点击