JavaScript买卖股票的最佳时机 II
买卖股票的最佳时机 II
- 前言
- 1.什么是贪心算法
- 2.LeetCode题目
- 3.解法
- 4.代码实现
- 总结
前言
1.什么是贪心算法
贪心法,又称贪心算法,贪婪算法,在对问题求解时,总是做出在当前看来最好的选择,期望通过每个阶段的局部最优选择达到全局最优,但结果不一定最优
适用场景:简单的说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最优解,就能用贪心算法的到最后的最优解,这种子问题最优解称为最优子结构
贪心算法与动态规划的不同点在于它对每个子问题的解决方案都做出当前的最优选择,不能回退,而动态规划会保留之前的运算结果,并根据之前的结果进行选择,有回退的功能,贪心是动态规划的理想化的情况。
2.LeetCode题目
给定一个数组 prices ,其中 prices[i] 表示股票第 i 天的价格。
在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
示例 1:
输入: prices = [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
示例 2:
输入: prices = [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
3.解法
因为不限制交易次数,只要今天价格比昨天高,就交易,利润为正累加,最后的和就是最大的利润,注意第一天是没有利润的,这道题之所以可以用贪心是因为局部最优:收集每天的正利润,可以推导出,全局最优:求得最大利润。
4.代码实现
<script>var maxProfit = function(prices) {var total = 0;for (var i = 0; i < prices.length - 1; i++) {total += Math.max(prices[i + 1] - prices[i], 0);//后面减去前面的,正数就相加为利润}return total;}// maxProfit([7, 1, 5, 3, 6, 4]);console.log(maxProfit([7, 1, 5, 3, 6, 4]));</script>
总结
本题不难,找到核心最优解的算法就很好实现。
JavaScript买卖股票的最佳时机 II相关推荐
- 力扣 买卖股票的最佳时机II
力扣 买卖股票的最佳时机II 题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注 ...
- 2、买卖股票的最佳时机 II
2.买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能 ...
- 力扣刷题day42|121买卖股票的最佳时机、122买卖股票的最佳时机II
文章目录 121. 买卖股票的最佳时机 贪心思路 动态规划思路 动态规划五部曲 122. 买卖股票的最佳时机II 贪心思路 动态规划思路 动态规划五部曲 121. 买卖股票的最佳时机 力扣题目链接 给 ...
- 122. 买卖股票的最佳时机 II
121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II 123. 买卖股票的最佳时机 III 188. 买卖股票的最佳时机 IV 309. 最佳买卖股票时机含冷冻期 714. 买卖股票的最佳 ...
- 算法训练Day49 | Leetcode121. 买卖股票的最佳时机(只能买卖一次);LeetCode122. 买卖股票的最佳时机II(可以买卖多次)
目录 Leetcode121. 买卖股票的最佳时机 方法一:暴力解法 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考与收获 方法二:贪心算法 1. 思路 2. 代码实现 3. 复杂度分析 方 ...
- LintCode领扣算法问题答案:150. 买卖股票的最佳时机 II
150. 买卖股票的最佳时机 II 描述 给定一个数组 prices 表示一支股票每天的价格. 你可以完成任意次数的交易, 不过你不能同时参与多个交易 (也就是说, 如果你已经持有这支股票, 在再次购 ...
- _42LeetCode代码随想录算法训练营第四十二天-动态规划 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II
_42LeetCode代码随想录算法训练营第四十二天-动态规划 | 121.买卖股票的最佳时机.122.买卖股票的最佳时机II 题目列表 121.买卖股票的最佳时机 122.买卖股票的最佳时机II 1 ...
- _28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II 、55.跳跃游戏、45.跳跃游戏II
_28LeetCode代码随想录算法训练营第二十八天-贪心算法 | 122.买卖股票的最佳时机II .55.跳跃游戏.45.跳跃游戏II 题目列表 122.买卖股票的最佳时机II 55.跳跃游戏 45 ...
- 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
LeetCode 122.买卖股票的最佳时机II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格.设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票 ...
最新文章
- 从一个文件夹下随机抽取一定数量(比例)的图片移动到另一个文件夹 Python3实现
- 使用反射处理protobuf数据结构
- pandas-数据分析
- pstate0 vid数值意义_老照片、新感悟:春兰摩托电喷 CB、看一口螺丝的意义
- java regex 正则表达式 提取数字和去除数字,过滤数字,提取价格
- linux系统给串口权限,让ubuntu串口和USB设备不用root权限访问
- 【廖雪峰官方网站/Java教程】设计模式(二)
- vue-cli初始化项目2.x|3.x
- 万字教程:Python Word 文档自动化
- element中form表单输入非负数验证
- TypeScript学习--Symbols
- java毕业设计乡镇卫生院信息管理mybatis+源码+调试部署+系统+数据库+lw
- 大数据开发超高频面试题!大厂面试必看!包含Hadoop、zookeeper、Hive、flume、kafka、Hbase、flink、spark、数仓等
- win7 计算机无法搜索文件夹,win7文件搜索功能不能使用了
- 学习C基础这一篇就够了
- impala 基础知识及使用
- 数据跨域交换成刚需 志翔科技助力企业数据安全合规
- 申宝投资-指数上周五中阴杀跌
- 第4章 深度估计与分割(SGBM、GrabCut、分水岭) 个人笔记
- 「解析」语义分割性能指标 附代码