当前位置: 首页 > news >正文

【贪心算法2】

力扣122.买卖股票最佳时机Ⅱ

链接: link

思路

要求最大利润,可以分解成子问题求解,在最低价格买入,最高价格卖出。
假如第0天价格最低,第3天价格最高,利润=prices[3] - pricnes[0],
可以将利润公式拆解成
(prices[3]-prices[2])+(prices[2]-prices[1])+(prices[1]-prices[0])
最终变成了求相邻两天的利润,所以可以得到一个关于利润的列表,只需要将这个列表大于0的相加即可求出最大利润

方法1:

class Solution {
    public int maxProfit(int[] prices) {
        int res = 0;
        for(int i = 1;i<prices.length;i++){
            res += Math.max(prices[i] - prices[i-1],0);
        }
        return res;
    }
}

相似题型

思路

上一道题是求利润最大化,而这道题是只能进行一次买卖,要求这一次利润最大
121.买卖股票的最佳时机
链接: link

class Solution {
    public int maxProfit(int[] prices) {
        int res = 0;
        int minPrice = prices[0];
        for (int p : prices) {
            res = Math.max(res, p - minPrice);
            minPrice = Math.min(minPrice, p);
        }
        return res;
    }
}

55.跳跃游戏
链接: link

class Solution {
    public boolean canJump(int[] nums) {
        if(nums.length == 1) return true;
        int cover = 0;
        for(int i =0;i<=cover;i++){
            cover = Math.max(i + nums[i],cover);
            if(cover >= nums.length - 1){
                return true;
            }
        }
        return false;
    }
}

45.跳跃游戏Ⅱ

思路

这道题需要记录2个距离,一个是当前位置能走的最大距离和下一步能走的最大距离,当下一步能走的最大距离覆盖终点即为最优解。注意要先更新下一步最大距离,当i=当前最大距离时再更新当前最大距离。
链接: link

class Solution {
    public int jump(int[] nums) {
        if (nums.length == 1)
            return 0;
        int cover_1 = 0; // 当前位置的覆盖范围
        int cover_2 = 0; // 下一个位置的覆盖范围
        int cnt = 0; // 记录跳次数
        for (int i = 0; i < nums.length; i++) {
            cover_2 = Math.max(i + nums[i], cover_2);
            // 此时只需要走一步即可到达终点
            if (cover_2 >= nums.length - 1) {
                cnt++;
                break;
            }
            // 走到当前覆盖的最大区域时,更新下一步可达的最大区域
            if (i == cover_1) {
                cover_1 = cover_2;
                cnt++;
            }
        }
        return cnt;
    }
}

相关文章:

  • Manus详细介绍,Manus核心能力介绍
  • go map的声明和使用
  • windows 平台如何点击网页上的url ,会打开远程桌面连接服务器
  • 学校地摊尝试实验
  • 《Python基础教程》第2-4章笔记:列表和元组、字符串、字典
  • 数据结构基础(一)
  • DeepSeek × 豆包深度整合指南:工作流全解析
  • 专业学习|多线程、多进程、多协程加速程序运行
  • 08react基础-react原理
  • 【js逆向】图灵爬虫练习平台 第十五题
  • bash: uwsgi: 未找到命令
  • 档案AI审核1
  • Python MongoDB速成教程
  • C# 异步任务队列封装
  • 测试直播postman+Jenkins所学
  • fiddler everywhere 绿色永久版
  • windows自动锁屏,并且要输入密码。如何取消?
  • 13 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar组件进阶指南(四)
  • Go语言分布式ID生成策略优选:UUID、Snowflake、XID、ObjectID、Krand性能对比评测
  • vite:初学 p5.js demo 画圆圈
  • 注册新公司流程/seo整体优化步骤怎么写
  • 家具建设网站/aso优化师工作很赚钱吗
  • 如何利用社交网站做招聘/西安百度seo推广
  • 网站如何做延迟加载/重庆网站seo费用
  • ABc做的网站被关了说没有备案/制作网页的软件有哪些
  • 人才市场招聘网站/百度关键词搜索排名帝搜软件