程式碼隨想錄演算法訓練營第三十一天 | 455.分發餅乾 376.擺動序列 53.最大子陣列和

深蓝von發表於2024-06-07

455.分發餅乾

題目連結 文章講解 影片講解

class Solution {
public:
    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) {
            // 儘量選取胃口小的小朋友,如果滿足那麼進行到下一個小朋友(++index)
            if(index < g.size() && g[index] <= s[i]) {
                ++index;
            }
            // 如果不滿,選取下一塊更大的餅乾
        }
        return index;
    }
};

376.擺動序列

題目連結 文章講解 影片講解

思路:
如果nums.size() == 1; 則返回1
找到第一組差值不為0的元素,如果全部差值均為0,返回1
否則初始化length和maxLength為2(因為已經有一組差值不為0的元素,所以初始化為2)
如果當前差值和前一個差值相乘為負數則length++更新maxLength
否則跳過,繼續迴圈;

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if(nums.size() == 1) return 1;

        // 記錄前一個差值
        int pre;
        // 記錄第一個插值不為0的起始位置
        int startIndex = 1;
        // 從第一個插值不為零的地方開始
        for(; startIndex < nums.size(); ++startIndex) {
            if(pre = nums[startIndex] - nums[startIndex - 1]) break;
        }
        // 如果插值全部為零,則返回1
        if(startIndex == nums.size()) return 1;


        int length = 2;
        int maxLength = 2;
        for(int i = startIndex; i < nums.size(); ++i) {
            int temp = nums[i] - nums[i - 1];
            // 前一個差值和後一個差值相乘為負數則說明是擺動序列
            if(temp * pre < 0) {
                length++;
                if(length > maxLength) maxLength = length;
                pre = temp;
            } 
            // 如果不是擺動的則直接跳過     
        }
        return maxLength;
    }
};

53.最大子陣列和

題目連結 文章講解 影片講解

思路:如果連續和為負數的話,直接從下一個數開始,因為此時 連續和 + 當前值 < 當前值;所以將連續和置為當前值,繼續累加

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int maxSum = INT_MIN;
        // 記錄連續和
        int sum = 0;
        for(int i = 0; i < nums.size(); ++i) {
            // 如果連續和小於0則,重新開始記錄
            if(sum < 0) sum = 0;
            sum += nums[i];
            maxSum = max(sum, maxSum);
        }
        return maxSum;
    }
};

相關文章