LeetCode初级算法之数组:122 买卖股票的最佳时机 II
买卖股票的最佳时机 II
题目地址:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
输入: [7,1,5,3,6,4]
输出: 7
解释:
在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出,
这笔交易所能获得利润 -1 + 5 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,
这笔交易所能获得利润 -3 + 5 = 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。
问题信息
输入:数组(表示几天的股价)
输出:整数(不同买进卖出的组合找到最大利润)
额外条件:买和卖可以多次但必须交替进行
思考

可多次买进卖出但必须交替保持一次交易,累计最大的场景实际就为波差之和。对于例1来说就是2-3天的差加上4-5天的差
示例 4:
输入: [7,1,2,4,2,4,3]
输出: 5
解释:如下图2-4,5-6两段时间的价格差之和即位最高利润

那么也就是需要两个指针一个标记低位,一个往后扫描每次移动并与之前比较。当扫描指针当前比前一个要小则移动低位指针到当前扫描指针。
总结代码
int i = 0;//低位指针
int nums = 0;//利润
for(int j = 1; j < prices.length; j++){
    /*
    当出现下降则用前一个高峰减低位指针,再移动低位指针
    但到数组结束有可能不出现低位一直增长就有else if
    */
    if(prices[j]<prices[j-1]){
        nums += prices[j-1]-prices[i];
        i = j;
    }else if(j == prices.length){
        nums += prices[j]-prices[i];
    }
}
return nums;
												
											LeetCode初级算法之数组:122 买卖股票的最佳时机 II的更多相关文章
- 【Leetcode】【简单】【122. 买卖股票的最佳时机 II】【JavaScript】
		
题目描述 122. 买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票) ...
 - Leetcode之动态规划(DP)专题-122. 买卖股票的最佳时机 II(Best Time to Buy and Sell Stock II)
		
Leetcode之动态规划(DP)专题-122. 买卖股票的最佳时机 II(Best Time to Buy and Sell Stock II) 股票问题: 121. 买卖股票的最佳时机 122. ...
 - Java实现 LeetCode 122 买卖股票的最佳时机 II
		
122. 买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意: ...
 - 刷题-力扣-122. 买卖股票的最佳时机 II
		
122. 买卖股票的最佳时机 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell ...
 - 【力扣】122. 买卖股票的最佳时机 II
		
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...
 - 力扣 122 买卖股票的最佳时机II
		
力扣 122 买卖股票的最佳时机II 思路: 动态规划,表面上是\(O(2^n)\)的搜索空间,实际上该天的选择只与前一天的状态(是否持有股票)有关.从收益的角度来看,确实每一天的不同选择都会产生不同 ...
 - [LeetCode] 122. 买卖股票的最佳时机ii best-time-to-buy-and-sell-stock-ii(贪心算法)
		
思路: 只要第二天的价格高于第一天,就进行交易.(这样的话就默认可以同一天内先卖出再买进) class Solution(object): def maxProfit(self, prices): & ...
 - LeetCode(122. 买卖股票的最佳时机 II)
		
问题描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你 ...
 - Leetcode 122.买卖股票的最佳时机II
		
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...
 
随机推荐
- notepad++覆盖了eclipse的快捷键
			
好长时间发现eclipse快捷键alt+/无法使用,今天决定解决一下 1.Windows Hotkey Explorer 用此工具找到是notepad++占用了快捷键 2.C:\Program Fil ...
 - Firefox威武 尚译威武!
			
有感于鹰文文档看起来麻烦,期待有一款即时翻译的工具,在windows上还可以,但是上班用的是ubuntu,所以就想到要找一个firefox插件,还真找到了,但是不是插件,是一个书签,那就是尚译!尚哥威 ...
 - 强迫自己学Jquery
			
Jquery 适合我吗? 里面有很多用不上的功能, 我需要什么,常用的判断,常用的扩展,来自Dojo的Hitch函数,事件绑定,样式处理(添加 删除 替换),Ajax,模块加载, 足够了,真心不想用这 ...
 - vue-count-to(简单好用的一个数字滚动插件)
			
vue-count-to是一个无依赖,轻量级的vue组件,可覆盖easingFn. 1. 你可以设置两个属性startVal和endVal,它会自动判断计数或倒计时.支持vue-ssr.vue-cou ...
 - Dubbo 服务引入-Version2.7.5
			
1.服务引用原理 Dubbo 服务引用的时机有两个,第一个是在 Spring 容器调用 ReferenceBean 的 afterPropertiesSet 方法时引用服务,第二个是在 Referen ...
 - Javac编译器详解
			
学习<深入了解Java虚拟机>有一段时间了,大概理解了Java从源代码编译到执行出结果的过程,也能明确的知道Java是半解释性语言.在执行源代码时,先通过Javac编译器对源代码进行词法分 ...
 - Nmap详解
			
扫描方式 -Pn/-P0:扫描前不用ping测试目标是否可达,默认所有目标端口都可达 -sT:TCP Connect扫描,进行完整的TCP三次握手,该类型扫描已被检测,且会在目标日志中记录大量连接请求 ...
 - 面试BAT问的最多的27道MyBatis 面试题(含答案和思维导图总结)
			
前言 关于MyBatis总结了一个思维导图希望对大家有帮助 什么是 Mybatis? Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身, ...
 - Vuex form表单处理, 比官网更好的办法
			
Vuex form表单处理, 比官网更好的办法 问题, 当使用vuex的state作为表单的v-model元素, 虽然简单粗暴, 但这种修改没有经过mutation方法. 在严格模式下会抛出错误 目录 ...
 - thinkphp3.2 添加自定义类似__ROOT__的变量
			
1 thinkphp3.2 添加自定义类似__ROOT__的变量 2 3 在config.php文件中 4 return array( 5 '' => '', 6 'TMPL_PARSE_STR ...