zoukankan      html  css  js  c++  java
  • 力扣(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 }

  • 相关阅读:
    ScrollVIew 边界阴影效果
    android 开发 常用工具类
    alertdialog.builder 自定义弹窗
    垂直的seekbar
    SlideSwitch
    [转]Android_气泡效果
    ListView 滚回顶部
    04_dljd_mysql登录和退出
    03_dljd_启动和关闭mysql服务
    02_dljd_mysql数据库的下载、安装与卸载
  • 原文地址:https://www.cnblogs.com/pgzhanglin/p/13269106.html
Copyright © 2011-2022 走看看