贪心算法专题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;
    }
相关推荐
园小异1 分钟前
2026年技术面试完全指南:从算法到系统设计的实战突破
算法·面试·职场和发展
m0_706653233 分钟前
分布式系统安全通信
开发语言·c++·算法
天天爱吃肉82181 小时前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
alphaTao1 小时前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
甄心爱学习1 小时前
【leetcode】判断平衡二叉树
python·算法·leetcode
颜酱1 小时前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法
不知名XL2 小时前
day50 单调栈
数据结构·算法·leetcode
@––––––2 小时前
力扣hot100—系列2-多维动态规划
算法·leetcode·动态规划
xsyaaaan2 小时前
代码随想录Day31动态规划:1049最后一块石头的重量II_494目标和_474一和零
算法·动态规划
Jay Kay3 小时前
GVPO:Group Variance Policy Optimization
人工智能·算法·机器学习