初次看到这个题的时候,我觉得很复杂,因为不知道所求的子数组的长度,而且里有负数增加了难度。看了答案之后发现竟然可以用这么简单的算法做出来,答案里说用的是贪心算法。
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 class Solution { 5 public: 6 int FindGreatestSumOfSubArray(vector<int> array) { 7 if (array.empty()) 8 return 0; 9 int sum = 0, maxsum = 0,maxnum=INT_MIN; 10 for (int i = 0; i < array.size(); i++) 11 { 12 //sum = sum + array[i]; 13 sum += array[i]; 14 if (sum < 0) 15 sum = 0; 16 else if (sum > maxsum) 17 maxsum = sum; 18 if (array[i] > maxnum) 19 maxnum = array[i]; 20 } 21 return (maxsum>0)?maxsum:maxnum; 22 } 23 }; 24 int main() 25 { 26 vector<int> test{ 1,-2,3,10,-4,7,2,-5 }; 27 Solution so; 28 cout << so.FindGreatestSumOfSubArray(test) << endl; 29 return 0; 30 }
剑指offer上说这个题也可以用动态规划的思路去做,但是代码是一样的。动态规划和贪心算法都是很常考的算法。