「程式碼隨想錄演算法訓練營」第二十三天 | 貪心演算法 part1

云雀AC了一整天發表於2024-07-29

455. 分發餅乾

題目連結:https://leetcode.cn/problems/assign-cookies/
題目難度:簡單
文章講解:https://programmercarl.com/0455.分發餅乾.html
影片講解:https://www.bilibili.com/video/BV1MM411b7cq
題目狀態:初次有貪心演算法的總體概念,有點懵

思路:

先將餅乾尺寸大的滿足胃口大的小孩,直到遍歷完。

程式碼:

class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int index = s.size() - 1;
        int res = 0;
        for(int i = g.size() - 1; i >= 0; --i) {
            if(index >= 0 && s[index] >= g[i]) {
                res++;
                index--;
            }
        }
        return res;
    }
};

376. 擺動序列

題目連結:https://leetcode.cn/problems/wiggle-subsequence/
題目難度:中等
文章講解:https://programmercarl.com/0376.擺動序列.html
影片講解:https://www.bilibili.com/video/BV17M411b7NS
題目狀態:貪心好難,只能看題解,自己做一點思路也沒有

思路:

記錄一下每個元素的前後坡度(有正負的),然後判斷前後坡度符號是否一致,如果不一致就加1,如果一致就跳過。
注意:當有平坡出現的時候,只需要記錄一次,並且前坡只有在發生改變的時候在需要變化。

程式碼:

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if(nums.size() == 1) return 1;
        int res = 1;
        int prediff = 0;
        int curdiff = 0;
        for(int i = 0; i < nums.size() - 1; ++i) {
            curdiff = nums[i + 1] - nums[i];
            if((prediff >= 0 && curdiff < 0) ||
               (prediff <= 0 && curdiff > 0)) {
                res++;
                prediff = curdiff;
            }
        }
        return res;
    }
};

53. 最大子陣列和

題目連結:https://leetcode.cn/problems/maximum-subarray/
題目難度:中等
文章講解:https://programmercarl.com/0053.最大子序和.html
影片講解:https://www.bilibili.com/video/BV1aY4y1Z7ya
題目狀態:還是學習思路...

思路:

先遍歷前面的和,當前面的和為負數的時候,那個前面所有的內容相加就對後面的元素沒有作用,直接從後面元素開始,一直遍歷結束。期間會記錄所有遍歷的最大值。

程式碼:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int count = 0;
        int res = INT_MIN;
        for(int i = 0; i < nums.size(); ++i) {
            count += nums[i];
            if(count > res) res = count;
            if(count <= 0) count = 0;
        }
        return res;
    }
};

相關文章