贪心算法篇2

贪心算法篇2_第1张图片

“星辰野草,造出无边的天地~” 


最⻓递增⼦序列

(1) 题目解析    

贪心算法篇2_第2张图片

(2) 算法原理        

贪心算法篇2_第3张图片

class Solution {
public:
    int lengthOfLIS(vector& nums) {
        // 使用dp 
        int n = nums.size(), ret = 1;
        // 初始化为1
        vector dp(n+1,1);
        // 从第二个位置开始
        for(int i=1;i& nums) {
        // 使用贪心
        vector vec; // 记录子序列长度
        vec.push_back(nums[0]); // 初始化
        for(int i=1;i> 1;
                    // 哪个分支暗含“相等” 不能跳过mid
                    if(nums[i] > vec[mid]) left = mid+1;
                    else right=mid;
                }
                // 更新较小值
                vec[left] = nums[i];
            }
        }
        return vec.size();
    }
};

递增的三元⼦序列

(1) 题目解析

贪心算法篇2_第4张图片

        这题同上一道题相差无几!甚至更为简单,因为我们只需要判断这个子序列长度是否超过3。

(2) 算法原理   贪心算法篇2_第5张图片

class Solution {
public:
    bool increasingTriplet(vector& nums) {
        // 这里默认给b一个无穷大的值
        // 由nums中的小数来替换
        int a = nums[0],b = INT_MAX;
        for(int i=1;i

最⻓连续递增序列 

(1) 题目解析

贪心算法篇2_第6张图片

(2) 算法原理 

贪心算法篇2_第7张图片

class Solution {
public:
    int findLengthOfLCIS(vector& nums) {
        int n = nums.size();
        int left = 0,right = 1,ret = 0;
        while(left < n)
        {
            while(right < n && nums[right] > nums[right-1]) right++;
            ret = max(ret,right - left);
            left = right++;
        }
        return ret;
    }
};

买卖股票的最佳时机

(1) 题目解析  贪心算法篇2_第8张图片

(2) 算法原理

贪心算法篇2_第9张图片

class Solution {
public:
    int maxProfit(vector& prices) {
        int prevMin = prices[0], n = prices.size();
        int ret = 0;
        for(int i=1;i

买卖股票的最佳时机 Ⅱ 

(1) 题目解析 

贪心算法篇2_第10张图片

(2) 算法原理 

贪心算法篇2_第11张图片

class Solution {
public:
    int maxProfit(vector& prices) {
        // 方法1:双指针+贪心
        int n = prices.size();
        int left = 0,right = left + 1;
        int ret = 0;
        while(left < n)
        {
            while(right < n && prices[right] > prices[right - 1]) right++;
            ret += prices[right - 1] - prices[left];
            left = right++;
        }
        return ret;
    }
};

class Solution {
public:
    int maxProfit(vector& prices) {
        // 方法2:拆分交易
        int ret = 0;
        for(int i=0;i

 


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~

贪心算法篇2_第12张图片

你可能感兴趣的:(综合算法篇,贪心算法,算法)