【贪心算法2】

news/2025/3/9 19:31:19/

力扣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;}
}

http://www.ppmy.cn/news/1577890.html

相关文章

JavaWeb学习——Servlet介绍

Servlet 简介 什么是 Servlet Servlet 是一种服务器端的 Java 技术&#xff0c;设计用于扩展 Web 服务器或应用服务器的功能。Servlet 主要运行在服务器端&#xff0c;用来处理来自客户端的请求并生成响应。它们是 Java 技术中处理 HTTP 请求和响应的核心组件之一。 servlet…

一周热点-文本生成中的扩散模型- Mercury Coder

一、背景知识 在人工智能领域&#xff0c;文本生成模型一直是研究的热点。传统的大型语言模型多采用自回归架构&#xff0c;从左到右逐个预测下一个标记。这种模型虽然在生成连贯文本方面表现出色&#xff0c;但在速度上存在一定的局限性&#xff0c;因为它需要按顺序生成每个标…

C/C++蓝桥杯算法真题打卡(Day4)

一、P11041 [蓝桥杯 2024 省 Java B] 报数游戏 - 洛谷 算法代码&#xff1a; #include<bits/stdc.h> using namespace std;// 计算第 n 个满足条件的数 long long findNthNumber(long long n) {long long low 1, high 1e18; // 二分查找范围while (low < high) {lo…

使用ASIWebPageRequest库编写Objective-C下载器程序

使用 ASIWebPageRequest 库编写 Objective-C 下载器程序是一个简单且高效的方式来处理 HTTP 请求。在 ASIHTTPRequest 和 ASIWebPageRequest 中&#xff0c;ASIWebPageRequest 是专门用于下载网页及其资源的库。 1. 安装 ASIWebPageRequest 首先&#xff0c;你需要安装 ASIHT…

linux 设置tomcat开机启动

在Linux系统中&#xff0c;要配置Tomcat开机自启动&#xff0c;可以创建一个名为 tomcat.service 的 systemd 服务文件&#xff0c;并将其放置在 /etc/systemd/system/ 目录下。以下是一个基本的服务文件示例&#xff0c;假设Tomcat安装在 /usr/local/tomcat 路径下&#xff1a…

雷池WAF的为什么选择基于Docker

Docker 是一种开源的容器化平台&#xff0c;可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点&#xff1a; 容器&#xff1a;Docker 使用容器来封装应用程序及其依赖项&#xff0c;使其能够在任何环境中都能…

如何确保爬虫遵守1688的使用协议

在使用爬虫技术调用1688开放平台的API接口时&#xff0c;确保爬虫遵守平台的使用协议至关重要。这不仅有助于避免法律风险&#xff0c;还能确保数据获取行为的合规性和道德性。以下是确保爬虫遵守1688使用协议的具体方法和注意事项&#xff1a; 一、遵守法律法规 合法使用数据…

后 Safe 时代:多签钱包安全新范式与防范前端攻击的新思路

时间轴 2025 年 2 月 21 日&#xff1a;Bybit 多签钱包被攻击&#xff0c;15 亿美金通过「合法」签名交易流出。 链上追踪&#xff1a;资金转入匿名地址并分拆混币&#xff0c;攻击者与部分验证节点存在潜在关联。 事后分析&#xff1a;安全审计发现攻击者利用 Safe 前端的供…