栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

53.最大子数组和

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

53.最大子数组和

蛮力法 思路

双重循环遍历数组的所有子序列,随时记录count,一旦发现count>max,赋值max=count。

//蛮力法
class Solution {
public:
    int maxSubArray(vector& nums) {
        int numsSize = nums.size();
        int max = INT_MIN;
        for (int i=0; i
            int count = 0;
            for (int j=i; j
                count += nums[j];
                if (count > max)    max = count;
            }
        }
        
        return max;
    }
};
动态规划法 思路

用 dp[i] 存储以 nums[i] 为结尾的最大子数组和;若此子序列比 nums[i] 还小,保留该元素即可。

dp每产生一个新元素,res 更新记录;

//动态规划法
class Solution {
public:
    int maxSubArray(vector& nums) {
        int numsSize = nums.size();
        int res = INT_MIN;
        //定义数组及初始化
        vector dp(numsSize);
        dp[0] = nums[0];
        res = dp[0];
        //给数组赋值
        for (int i=1; i
            dp[i] = max(dp[i-1]+nums[i], nums[i]);
            res = max(dp[i], res);
        }
        return res;
    }
};
优化的动态规划(用int代替vector) 思路

因为每次只考虑 dp 的 i-1 项,所以用 int 保存即可,大大减小复杂度。

//优化动态规划
class Solution {
public:
    int maxSubArray(vector& nums) {
        int numsSize = nums.size();
        int res = INT_MIN;
        int dp = nums[0];
        res = dp;
        for (int i=1; i
            dp = max(dp+nums[i], nums[i]);
            res = max(dp, res);
        }
        return res;
    }
};
贪心法 思路

动态规划法的思路是用 max() 判断是否加 dp(i-1) ;

贪心法的思路是用 max() 判断是否加 nums[i] ;

//贪心法
class Solution {
public:
    int maxSubArray(vector& nums) {
        int numsSize = nums.size();
        int res = INT_MIN;
        int sum = 0;
        for (int i=0; i
            sum += nums[i];
            res = max(res,sum);
            if (sum < 0) {
                sum = 0;
            }
        }
        return res;
    }
};
  1. 初始值必须是理论最小值,因为有全负数的子序列;
  2. 遇到“最大”和“连续”问题,首选动态规划法;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025917.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号