贪心算法篇2

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


最⻓递增⼦序列

(1) 题目解析    

(2) 算法原理        

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        // 使用dp 
        int n = nums.size(), ret = 1;
        // 初始化为1
        vector<int> dp(n+1,1);
        // 从第二个位置开始
        for(int i=1;i<n;++i)
        {
            // 子序列搜索
            for(int j=0;j<i;++j)
            {
                // 可以进行拼接
                if(nums[j] < nums[i]) dp[i] = max(dp[i],dp[j] + 1);
            }
            ret = max(ret,dp[i]);
        }
        return ret;
    }
};

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        // 使用贪心
        vector<int> vec; // 记录子序列长度
        vec.push_back(nums[0]); // 初始化
        for(int i=1;i<nums.size();++i)
        {
            // 如果是最大的直接插入即可
            if(vec.back() < nums[i]) vec.push_back(nums[i]);
            else
            {
                // 二分查找
                int left = 0,right = vec.size() - 1;
                while(left < right)
                {
                    int mid = (left + right) >> 1;
                    // 哪个分支暗含“相等” 不能跳过mid
                    if(nums[i] > vec[mid]) left = mid+1;
                    else right=mid;
                }
                // 更新较小值
                vec[left] = nums[i];
            }
        }
        return vec.size();
    }
};

递增的三元⼦序列

(1) 题目解析

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

(2) 算法原理   

class Solution {
public:
    bool increasingTriplet(vector<int>& nums) {
        // 这里默认给b一个无穷大的值
        // 由nums中的小数来替换
        int a = nums[0],b = INT_MAX;
        for(int i=1;i<nums.size();++i)
        {
            if(b < nums[i]) return true; // 找打了
            else if(a < nums[i]) b = nums[i]; // 替换b
            else a = nums[i];
        }
        return false;
    }
};

最⻓连续递增序列 

(1) 题目解析

(2) 算法原理 

class Solution {
public:
    int findLengthOfLCIS(vector<int>& 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) 算法原理

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int prevMin = prices[0], n = prices.size();
        int ret = 0;
        for(int i=1;i<n;++i)
        {
            ret = max(ret,prices[i] - prevMin);
            prevMin = min(prevMin,prices[i]);   // 更新
        }
        return ret;
    }
};

买卖股票的最佳时机 Ⅱ 

(1) 题目解析 

(2) 算法原理 

class Solution {
public:
    int maxProfit(vector<int>& 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<int>& prices) {
        // 方法2:拆分交易
        int ret = 0;
        for(int i=0;i<prices.size()-1;++i)
        {
            if(prices[i] < prices[i+1]) ret += prices[i+1] - prices[i];
        }
        return ret;
    }
};

 


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

祝你好运,向阳而生~

相关推荐

  1. 算法整理——【贪心算法练习(2)】

    2024-02-05 03:58:01       27 阅读
  2. 算法提高基础算法第一章 - 贪心算法

    2024-02-05 03:58:01       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-05 03:58:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-05 03:58:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-05 03:58:01       87 阅读
  4. Python语言-面向对象

    2024-02-05 03:58:01       96 阅读

热门阅读

  1. 51单片机实验课二

    2024-02-05 03:58:01       53 阅读
  2. 类银河恶魔城学习记录1-5 CollisionCheck源代码 P32

    2024-02-05 03:58:01       51 阅读
  3. WorldModels-A3C

    2024-02-05 03:58:01       46 阅读
  4. PHP之EOF定界符

    2024-02-05 03:58:01       52 阅读
  5. 什么是单点登录以及如何实现

    2024-02-05 03:58:01       47 阅读
  6. Group velocity(群速度)

    2024-02-05 03:58:01       58 阅读
  7. 谈谈人生的不确定阶段

    2024-02-05 03:58:01       48 阅读
  8. Ajax-1

    2024-02-05 03:58:01       46 阅读
  9. 平台+低代码:中小企业数字化转型普惠之路

    2024-02-05 03:58:01       61 阅读