刷题day27

贪心算法

说实话贪心算法并没有固定的套路。
所以唯一的难点就是如何通过局部最优,推出整体最优。
不好意思了,贪心没有套路,说白了就是常识性推导加上举反例。

leetcode 455 分发饼干

https://leetcode.cn/problems/assign-cookies/description/
思路:小饼干先喂给胃口小的保证局部最优

    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int index = 0;
        for(int i = 0; i<s.size();++i)
        {
            if(index<g.size() && s[i] >= g[index])
            {
                index++;
            }
        }

        return index;
    }

leetcode 376 摆动序列

    int wiggleMaxLength(vector<int>& nums) {
        // 单元素序列
         if(nums.size() == 1) return nums.size();

         int curDiff = 0;
         int preDiff = 0;
         int result = 1;

         for(int i=1; i<nums.size(); ++i)
         {
            curDiff = nums[i] - nums[i-1];
            if((preDiff>=0 && curDiff <0) || (preDiff<=0 && curDiff>0))
            {
                result++;
            }
            if(nums[i] != nums[i-1]) preDiff = curDiff;
         }

         return result;
    }

leetcode 53. 最大子数组和

可以尝试使用分而治之的策略

    int maxSubArray(vector<int>& nums) {
        int result = *max_element(nums.begin(), nums.end());
        int sum = 0;
        for(int i=0; i<nums.size();++i)
        {   
            sum += nums[i];
            if(sum < 0)
                sum = 0;
            else
                result = result > sum ? result : sum;
        }

        return result;
    }
posted @ 2024-12-24 02:12  icon_cs  阅读(1)  评论(0)    收藏  举报