剑指offer 30 : 连续子数组的最大和

1 两次遍历 寻找最大和

2 贪心思想,sum为负数,sum为当前值, sum大于0,为sum加当前值; 如果全为负数,找到最大的一个负数

//连续子数组的最大和
    int FindGreatSum(vector<int> array) {
        if (array.size() == 0) {
            return 0;
        }
        int sum = 0 , maxsum = 0;
        for (int i = 0; i < array.size(); i++) {
            sum = 0;//每次一开始重置0
            for(int j = i; j < array.size(); j++) {

                sum = sum + array[j];
                if (sum > maxsum) {
                    maxsum = sum;
                    cout << maxsum << endl;
                }
            }
        }
        return maxsum;
    }

    //贪心思想
    int FindGreatSum2(vector<int> array) {
        if (array.size() == 0) {
            return 0;
        }

        int sum = 0, maxsum = -100, maxnum = -10000;
        for (int i = 0; i < array.size(); i++) {
            if (sum <= 0) {
                sum = array[i];//和小于0,和就为当前数
            }
            else {
                sum = sum + array[i];//大于0,加上当前数
            }

            if (sum > maxsum) {
                maxsum = sum;
            }
            if (array[i] > maxnum) { // 全负数情况
                maxnum = array[i];
            }
        }
        return (maxnum < 0 ) ? maxnum : maxsum;

    }

猜你喜欢

转载自blog.csdn.net/liufanlibashanxi/article/details/85230260
今日推荐