贪心算法专题Day19

122. 买卖股票的最佳时机 II

总收益可拆解为相邻单日正收益之和,局部最优(赚单日差价)能直接推导出全局最优

cpp 复制代码
    int maxProfit(vector<int>& prices) {
        int res = 0;
        for(int i = 1; i < prices.size(); i++){
            if(prices[i] - prices[i - 1] > 0){
                res += prices[i] - prices[i - 1];
            }
        }
        return res;
    }

55. 跳跃游戏

每一步的贪心选择:扩展最远边界

cpp 复制代码
bool canJump(vector<int>& nums) {
        int farest = 0;
        for(int i = 0; i < nums.size() && i <= farest; i++){
            farest = max(i + nums[i], farest);
            if(farest >= nums.size() - 1){
                return true;
            }
        }
        return false;
    }

45. 跳跃游戏 II

分层跳跃求最少次数

每次在最远边界之前 都记录 下次更新的值

到达边界后 跳一步 再更新边界,若边界未到达终点,则需要进入下一跳边界的寻找中

cpp 复制代码
    int jump(vector<int>& nums) {
        if(nums.size() == 1){
            return 0;
        }
        int farest = 0;
        int end = 0;
        int res = 0;
        for(int i = 0; i < nums.size() - 1; i++){
            farest = max(i + nums[i], farest);
            if(i == end){
                end = farest;
                res++;
            }
        }
        return res;
    }

1005. K 次取反后最大化的数组和

第一步:排序

第二步:尽可能将所有负数取反

第三步:若k没用完,此时nums中所有数都大于等于0,取负两次相当于没变化,于是用k%2,若还余1,把最小的数取反

第四步:求和

cpp 复制代码
    int largestSumAfterKNegations(vector<int>& nums, int k) {
        sort(nums.begin(), nums.end());
        //对所有负数取反
        for(int i = 0; i < nums.size() && k > 0; i++){
            if(nums[i] < 0){
                nums[i] = nums[i] * -1;
                k--;
            }
            else{
                break;
            }
        }
        //若k有剩余,对最小的数取反
        if(k > 0){
            if(k % 2 == 1){
                sort(nums.begin(), nums.end());
                nums[0] = nums[0] * -1;
            }
        }
        //求和
        int sum = 0;
        for (int num : nums) {
            sum += num;
        }
        return sum;
    }
相关推荐
y = xⁿ1 分钟前
【LeetCodehot100】 T543:二叉树的直径 T102:二叉树的层序遍历
算法
敲上瘾2 分钟前
位图与布隆过滤器:原理、实现与海量数据处理方案
大数据·数据结构·算法·位图·布隆过滤器
宵时待雨9 分钟前
C++笔记归纳13:map & set
开发语言·数据结构·c++·笔记·算法
1104.北光c°1 小时前
滑动窗口HotKey探测机制:让你的缓存TTL更智能
java·开发语言·笔记·程序人生·算法·滑动窗口·hotkey
仰泳的熊猫5 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
无极低码8 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发9 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
superior tigre9 小时前
22 括号生成
算法·深度优先
努力也学不会java11 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试