Leetcode--122. 买卖股票的最佳时机Ⅱ
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
示例 2:
输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
示例 3:
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
思路:
情况一:今天买,明天卖,收益为prices[i]-prices[i-1]
情况二:连续上涨,则在第一天买,在上涨到顶峰的最后一天卖掉
情况三:连续下降, 则不买卖收益最大,不会亏钱。
算法流程:
遍历整个股票交易日价格列表 price,策略是所有上涨交易日都买卖(赚到所有利润),所有下降交易日都不买卖(永不亏钱)。
设 tmp 为第 i-1 日买入与第 i 日卖出赚取的利润,即 tmp = prices[i] - prices[i - 1] ;
当该天利润为正 tmp > 0,则将利润加入总利润 profit;当利润为 0 或为负,则直接跳过;
遍历完成后,返回总利润 profit。
复杂度分析:
时间复杂度 O(N):只需遍历一次price;
空间复杂度 O(1):变量使用常数额外空间。
提交的代码:
class Solution {
public int maxProfit(int[] prices) {
int sum=0;
for(int i=1;i<prices.length;i++)
{
if(prices[i]-prices[i-1]>0)
{
sum+=prices[i]-prices[i-1];
}
}
return sum;
}
}
完整的代码:
public class Solution122 {
public static int maxProfit(int[] prices) {
int sum=0;
for(int i=1;i<prices.length;i++)
{
if(prices[i]-prices[i-1]>0)
{
sum+=prices[i]-prices[i-1];
}
}
return sum;
}
public static void main(String[] args)
{
int nums[] = {7,1,5,3,6,4};
System.out.println(maxProfit(nums));
}
}
Leetcode--122. 买卖股票的最佳时机Ⅱ相关推荐
- leetcode 122. 买卖股票的最佳时机 II 思考分析
目录 题目 贪心法 题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时 ...
- Leetcode 122.买卖股票的最佳时机II
Time: 20190904 Type: Easy 考察:动态规划 题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完 ...
- Leetcode 122.买卖股票的最佳时机 II (每日一题 20210618)
给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票).注意:你不能同时参与多 ...
- leetcode 122. 买卖股票的最佳时机 II(贪心算法)
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...
- LeetCode 122 买卖股票的最佳时机 II
题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一 支股票).注意:你不能同时参与多笔交易(你必 ...
- leetcode 122. 买卖股票的最佳时机 II
难度:中等 频次:35 题目: 给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格. 在每一天,你可能会决定购买和/或出售股票.你在任何时候 最多 只能持有 一股 股票. ...
- 106. Leetcode 122. 买卖股票的最佳时机 II (动态规划-股票交易)
步骤一.确定状态: 确定dp数组及下标含义 dp[i]是一个长度为len(prices)的一维数组,表示的是在第i天持有股票 步骤二.推断状态方程: 第i天持有股票,即dp[i][1], 那么两个状态 ...
- leetcode 122 买卖股票的最佳时机II
贪心算法:如果今天买明天能够盈利,那就今天买入明天卖出:对于这个问题来讲是具有最优子结构性质的 分情况: 1)当len<1:不会赚钱,return 0: 2) class Solution { ...
- Leetcode 122. 买卖股票的最佳时机 II 解题思路及C++实现
解题思路: 采用贪心策略,只要后一天的价格高于前一天,就将差价加进来.得到的结果就是能获取的最大利润. class Solution { public:int maxProfit(vector< ...
- 159. Leetcode 122. 买卖股票的最佳时机 II (贪心算法-股票题目)
class Solution:def maxProfit(self, prices: List[int]) -> int:result = 0for i in range(1,len(price ...
最新文章
- activiti部署、执行,完成简单示例
- 为什么不应该重写 service 方法?
- 深度学习:tensorflow 的整体实现,numpy实现深度学习(三)
- IOC--IOC+AOP--热插拔的系统架构实现演化
- 同一页面中引入多个JS库产生的冲突解决方案(转)
- 我用 Python 集齐了五福
- regsvr32.exe进程注册dll文件
- C刷题记录-1017
- 《电子元器件的可靠性》——3.7节电子元器件失效率鉴定试验
- 利用动态数组生成魔方矩阵
- codesmith for java_codesmith 入门介绍【转载】
- qemu: usb存储设备仿真
- ftp服务器有哪些作用,FTP是什么意思 FTP服务器有什么作用及功能
- 达梦数据库——Oracle到达梦数据迁移
- vue 循环勾选框_Vue学习笔记-遍历el-checkbox
- 基于java的坦克大战游戏
- JavaFX报错:Class FIFinderSyncExtensionHost is implemented in both
- IP-Guard禁止客户端下载或接收exe文件
- 拉格朗日乘子库恩塔克条件
- Windows server服务篇1:Windows Server 2012R2 AD域控 辅助域 只读域 子域
热门文章
- LeetCode 519. 随机翻转矩阵(哈希)
- LeetCode 1332. 删除回文子序列
- LeetCode 263. 丑数 264. 丑数 II(DP)
- LeetCode 1013. 将数组分成和相等的三个部分
- gradle 上传jar包_Gradle学习记录014 关于依赖的声明
- js 将图片置灰_艾叶灰千万别扔——艾叶灰的神奇功效
- python中的死锁
- java怎么把数据返回给客户端_将数据从Servlet返回到Java客户端
- python方向键控制角色_python方向键控制上下左右代码
- 论文浅尝 - ACL2020 | 通过集成知识转换进行多语言知识图谱补全