• Leetcode 53. 最大子序和


    思路1

    1.暴力解法,两重循环,从某一个下标开始,计算连续的和,求最大

    代码

    class Solution
    {
    public:
        int maxSubArray(vector<int> &nums)
        {
            //类似寻找最大最小值的题目,初始值一定要定义成理论上的最小最大值
            int max = INT_MIN;
            int numsSize = int(nums.size());
            for (int i = 0; i < numsSize; i++)
            {
                int sum = 0;
                for (int j = i; j < numsSize; j++)
                {
                    sum += nums[j];
                    if (sum > max)
                    {
                        max = sum;
                    }
                }
            }
            return max;
        }
    };

    思路2 动态规划

    class Solution {
    public:
        int maxSubArray(vector<int>& nums) {
            int pre = 0,Max_val = nums[0];
            for(const auto &x:nums) //需要改变迭代对象  加&
            {
                pre = max(pre+x,x); //选择每一步加入的值进行比较,去较大的值作为加入当前的子序列
                Max_val = max(Max_val,pre); 
            }
            return Max_val;
        }
    };

    思路3

    class Solution(object):
        def maxSubArray(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            len_num = len(nums)
            for i in range(1,len_num):
                nums[i] = max(nums[i],nums[i]+nums[i-1])
            return max(nums)
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    前端js部分面试题
    前端css部分面试笔试题
    javascript 面向对象
    string 对象
    JavaScript 正则表达式
    JavaScirpt 位运算
    JavaScript冒泡循环排序案例
    JavaScript 练习题
    浏览器缓存机制
    浏览器对象模型(BOM)
  • 原文地址:https://www.cnblogs.com/gcter/p/15338289.html
Copyright © 2020-2023  润新知