力扣(LeetCode)试题53-最大子序和 C++代码

刚看到这个题,想了半天没有思路,看到题解的贪心算法,顿时恍然大悟。

直接放代码吧

如果当前和为负,并且下个元素比当前和大,则放弃前面的元素,重新将下个元素置为当前和

 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 //若当前和为负,则舍弃前边的数组,
 6 class Solution {
 7 public:
 8     int maxSubArray(vector<int>& nums) {
 9         if (nums.size() == 0) return 0;
10         else
11         {
12             if (nums.size() == 1) return nums[0];        
13             else
14             {
15                 int cur_sum = nums[0];//将数组第一个值,作为当前和与最大和
16                 int max_sum = nums[0];
17                 for (int i = 1; i < nums.size(); i++)
18                 {
19                     if ( (cur_sum <= 0) && (cur_sum<nums[i]) )//如果当前和小于0,并且小于下一个元素,则下个元素重置为当前和
20                     {
21                         cur_sum = nums[i];
22                     }
23                     else cur_sum += nums[i];
24                     if (cur_sum>max_sum)
25                         max_sum = cur_sum;
26                 }
27                 return max_sum;
28             }
29             
30         }
31     }
32 };
33 
34 int main()
35 {
36     Solution sol;
37     int max_sum;
38     vector<int> nums{ -2, 1, -3, 4, -1, 2, 1, -5, 4 };
39     max_sum = sol.maxSubArray(nums);
40     cout << max_sum << endl;
41 
42     int u;
43     cin >> u;
44     return 0;
45 }

 

posted @ 2020-07-08 20:37  ZyLin-ux  阅读(175)  评论(0编辑  收藏  举报