LeetCode 121. Best Time to Buy and Sell Stock (买卖股票的最好时机)
Say you have an array for which the ith element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.
Example 1:
Input: [7, 1, 5, 3, 6, 4]
Output: 5 max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:
Input: [7, 6, 4, 3, 1]
Output: 0 In this case, no transaction is done, i.e. max profit = 0.
题目标签:Array, Dynamic Programming
题目给了我们一个array, 每一个数字代表了当时股票价格。让我们找出最大的收益。
来更新一下,之前写的解题思路有点错误,所以这里重新写。
试想一下,什么时候才有收益? Example 2 里就不存在最大收益,那么最基本是的 有一个小的值在前面,一个大的值在后面才有收益。
那么什么时候才是 最大收益? 当一个最大收益出现时候,从index 0 开始 到 后面那个 卖出的价格 这个区间里,买入的价格肯定是这个区间里的min,卖出的是 从买入价格开始 到 卖出价格 这段区间里的max。
那么是不是意味着 我们只要找到array里的min 和在min 之后范围里的max 就对了呢? 这是之前想错的地方。
举个例子:7 14 1 5 3 6 4 这里最小的是1 在1后面最大的是6, 1 和 6的 profit 是5, 但是这里最大的收益是 14 - 7 = 7。
所以我们要在遍历的过程中,一直维护更新一个min, 这个min最终的确是最小的那个,但是我们需要的min不一定是整个array中最小的。在遍历中,对于每一次的 收益 (目前的price - 目前的min),都要检查它是不是可能成为最大的收益。 这样做的目的是因为:我们不知道我们需要的min 是在什么时候出现,所以我们要检查所有 price - min 的可能性。因为上面的黑体字,最大收益肯定出现在 一段区间内, 买入的价格是区间里的min。
Java Solution:
Runtime beats 88.15%
完成日期:04/06/2017
关键词:Array, Dynamic Programming
关键点:时时保存最小价钱,对于每一个价钱,利用当前价格 - 最小价格, 保存最大收益值
class Solution
{
public int maxProfit(int[] prices)
{
int maxProfit = 0;
int min = Integer.MAX_VALUE; for(int price: prices)
{
// keep updating the min all the time
min = Math.min(min, price);
// check each possible maxProfit and keep the larest one
maxProfit = Math.max(maxProfit, price - min);
} return maxProfit;
}
}
参考资料:
http://www.cnblogs.com/springfor/p/3877059.html
LeetCode 题目列表 - LeetCode Questions List
LeetCode 121. Best Time to Buy and Sell Stock (买卖股票的最好时机)的更多相关文章
- [LeetCode] 121. Best Time to Buy and Sell Stock 买卖股票的最佳时间
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- 121. Best Time to Buy and Sell Stock买卖股票12
一 [抄题]: If you were only permitted to complete at most one transaction (ie, buy one and sell one sha ...
- 121. Best Time to Buy and Sell Stock 买卖股票的最佳时机
网址:https://leetcode.com/problems/Best-Time-to-Buy-and-Sell-Stock/ 第一想法是滑动窗口法,稍微尝试后发现不可行,至少我不会... 而后想 ...
- 30. leetcode 121. Best Time to Buy and Sell Stock
121. Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of ...
- leetcode 121. Best Time to Buy and Sell Stock 、122.Best Time to Buy and Sell Stock II 、309. Best Time to Buy and Sell Stock with Cooldown
121. Best Time to Buy and Sell Stock 题目的要求是只买卖一次,买的价格越低,卖的价格越高,肯定收益就越大 遍历整个数组,维护一个当前位置之前最低的买入价格,然后每次 ...
- [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- [LintCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- Java for LeetCode 121 Best Time to Buy and Sell Stock
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- leetcode 121. Best Time to Buy and Sell Stock ----- java
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
随机推荐
- spring 注解方式配置Bean
Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件特定组件包括: @Component:基本注解,标示了一个受Spring管理的Bean组件 @Respository:标识 ...
- 枚举类TimeUnit
枚举类TimeUnit 全路径为 java.util.concurrent.TimeUnit TimeUnit 主要用于通知基于时间的方法如何解释给定的计时参数 举例如下 如果 lock 不可用,则以 ...
- Cow Sorting hdu 2838
Cow Sorting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Android开发更新UI的几种方式
1.runOnUiThread 2.handler post 3.handler sendmessage 4.view post xml布局文件: <RelativeLayout xmlns:a ...
- 前端框架——AngularJS
前 言 AngularJS是一款为了克服HTML在构建应用上的不足而设计的优秀的前端JS框架.AngularJS有着诸多特性,最为核心的是:MVC.模块化.自动化双向数据绑定.语义化标签.依赖注 ...
- 简单Elixir游戏服设计-创建玩家模型
删除model.ex 创建玩家模型 player.ex, 简单化,只有唯一标识,昵称,金币,够用了. 选择 map 代表数据,是为了扩展数据结构,方便增加功能.struct也是可以的. add_num ...
- For in 与For of 区别
For in 与For of 区别 for in遍历的是数组的索引(即键名)一般用于遍历对象:for(var index in obj):而for of遍历的是数组元素值:for(var value ...
- scala中的Type使用
trait Base { val name: String } case class S( name: String, age: Int ) extends Base case class F( na ...
- Java爬虫
作为一位Java爬虫的初学者,分享一下自己的心得.所用到的jar包 org.codehaus.jettison.jar jsoup-1.7.3.jar个人认为爬虫的实现机制:获取Docume对象-&g ...
- android Intent机制详解
http://www.oschina.net/question/565065_67909 http://www.cnblogs.com/hummersofdie/archive/2011/02/12/ ...