力扣121(java&python)-买卖股票的最佳时机(简单)
题目:
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
提示:
1 <= prices.length <= 105
0 <= prices[i] <= 104
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
动态规划:
动态规划做题步骤:
1.明确dp[i]所代表的含义?(二维dp[i][i])
2.根据dp[i]和dp[i-1]的关系得到状态转移方程;
3.确定初始条件dp[0]。
所以这道题买卖股票的最佳时机是由之前买或者不买的状态决定的,而之前的状态又由它之前的状态决定的,dp[i]代表前 i 天的最大利润,所以状态转移方程为dp[i] = max(dp[i-1], prices[i] - minprices)
java代码:
1 class Solution {
2 public int maxProfit(int[] prices) {
3 int n = prices.length;
4 int[] dp = new int[n];
5 //dp数组初始化
6 dp[0] = 0;
7 //设定初始最低价格就为第一个价格
8 int minprice = prices[0];
9 for(int i = 1; i < n; i++){
10 dp[i] = Math.max(dp[i-1], prices[i] - minprice);
11 minprice = Math.min(minprice, prices[i]);
12 }
13 return dp[n - 1];
14 }
15 }
python3代码:
1 class Solution:
2 def maxProfit(self, prices: List[int]) -> int:
3 n = len(prices)
4 dp = [0] * n
5 minprice = prices[0]
6 for i in range(1, n):
7 dp[i] = max(dp[i -1], prices[i] - minprice)
8 minprice = min(minprice, prices[i])
9 return dp[-1]
解释:
① dp = [0] * n:浅拷贝,也就是把一个列表重复了n次,例如dp = [0] * 4结果为dp = [0,0,0,0]
区别:[0 for _ in range(n)] :这是深拷贝,创建。
②最后返回的是dp[-1]:在python语法中,[-1]代表的是最后一个元素,如果写成dp[n],就会导致越界,数组的最大下标为n-1。
③可以省略 if n == 0: return 0,因为题目中已经明确prices.length是大于等于1的,并不会存在长度为0的情况。
力扣121(java&python)-买卖股票的最佳时机(简单)的更多相关文章
- 力扣(LeetCode)买卖股票的最佳时机 个人题解
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...
- python买卖股票的最佳时机--贪心/蛮力算法简介
开始刷leetcode算法题 今天做的是“买卖股票的最佳时机” 题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更 ...
- LeetCode(121):买卖股票的最佳时机
Easy! 题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买 ...
- 力扣 122 买卖股票的最佳时机II
力扣 122 买卖股票的最佳时机II 思路: 动态规划,表面上是\(O(2^n)\)的搜索空间,实际上该天的选择只与前一天的状态(是否持有股票)有关.从收益的角度来看,确实每一天的不同选择都会产生不同 ...
- 刷题-力扣-122. 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell ...
- 【力扣】122. 买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...
- Java实现 LeetCode 121 买卖股票的最佳时机
121. 买卖股票的最佳时机 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不 ...
- 每日一题-——LeetCode(121)买卖股票的最佳时机
题目描述: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润.注意你不能在买入股票前卖出股票 ...
- Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)
Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock) 股票问题: 121. 买卖股票的最佳时机 122. 买卖股票的最 ...
- Leetcode——121. 买卖股票的最佳时机
题目描述:买卖股票的最佳时机 题目要求求解能获得最大利润的方式? 可以定一个二维数组 d [ len ] [ 2 ] ,其中d[ i ][ 0 ] 表示前i天可以获得的最大利润:d[ i ][ 1 ] ...
随机推荐
- MyBatisPlus常用功能总结!(附项目示例)
这篇主要是总结一下MybatisPlus一些常用的场景,目前主要有以下几点: 完整的CURD操作示例 逻辑删除功能示例 自动填充功能示例 分页插件功能示例 有关一些其它重要的功能比如 条件生成器.主键 ...
- 元宇宙解决方案——云端GPU在元宇宙中的作用
GPU算力可以说是我们现在信息化时代的基础设施,在某种程度上说我们已经进入了算力时代,手机.电脑.车载等算力已经渗透到各行各业了. 当然算力对元宇宙也很重要,尤其是在可视化方面,元宇宙需要很逼真的渲染 ...
- 上位机连接PLC
上位机使用Hsl框架连接PLC 顺便讲下策略模式 话不多说,直接上代码 public interface IPlcHost { bool ConnectionPlc(string path); } p ...
- 二次元 & 动漫壁纸网站(内容记录)
前言 天天和电脑.手机以及平板等电子设备打交道,一个好看的桌面壁纸图片当然是必不可少的,也曾经分享过<值得珍藏的高清壁纸网站推荐>,各种类型和分辨率的壁纸都有. 今天再分享些「高清二次元& ...
- TorchV的RAG实践分享(二):基于ElasticSearch的混合检索实战&原理分析
概述 在昨天员外分享的<TorchV的RAG实践分享(1)--RAG的定位.技术选型和RAG技术文章目录>一文中介绍了TorchV的由来,也分享了我们的几个基线产品和应用架构的方向,我们想 ...
- Oracle 章节编号排序
测试代码 CREATE TABLE TEST (CH_CODE VARCHAR2(10)); INSERT INTO TEST (CH_CODE) VALUES ('1.1'); INSERT INT ...
- springboot整合视频点播
1 //上传视频到阿里云 2 @Override 3 public String uploadAyl(MultipartFile file) { 4 try { 5 //accessKeyId,acc ...
- quartus之LPM_MULT测试
quartus之LPM_MULT测试 1.基本作用 一个专用的乘法器,可以调用DSP单元的IP,可以提高设计中的运算效率. 2.实际操作 `timescale 1ns/1ns module mult_ ...
- KingbaseES 参数设置优先级别
Oracle的参数可以设置system和session级别,当设置了session级别的参数时,会覆盖值system级别. KingbaseES除了该两个级别外,还有database级别.user/r ...
- KingbaseES运维案例之---数据库启动“could not open shared memory segment”
案例说明: 在kylin系统下数据库启动出现"could not open shared memory segment xxxx"的故障,故障如下所示: 适用版本: Kingb ...