Skip to content

Commit d2a3535

Browse files
authored
Merge pull request doocs#176 from Hinsteny/master
Add Solution.py for 0121.Best Time to Buy and Sell Stock
2 parents c2b624b + fcba237 commit d2a3535

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## 买卖股票的最佳时机
2+
### 题目描述
3+
4+
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
5+
6+
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
7+
8+
注意你不能在买入股票前卖出股票。
9+
10+
**示例 1:**
11+
```
12+
输入: [7,1,5,3,6,4]
13+
输出: 5
14+
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
15+
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
16+
```
17+
18+
**示例 2:**
19+
```
20+
输入: [7,6,4,3,1]
21+
输出: 0
22+
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
23+
```
24+
25+
### 解法
26+
可以将整个数组中的数画到一张折现图中, 需要求的就是从图中找到一个波谷和一个波峰, 使其二者的差值最大化(其中波谷点需要在波峰点之前)。
27+
28+
我们可以维持两个变量, minprice(可能产生最大差值的波谷)初始值最大整数((1 << 31) -1), maxprofit(产生的最大差值)初始值 0, 然后迭代处理数组中的每个数进而优化两个变量的值; 如果数组元素`prices[i]`不比`minprice`大, 那就是目前为止最小波谷, 将 `minprice=prices[i]`;如果数组元素`prices[i]``minprice`大, 那就判断`prices[i]``minprice`的差值是否比`maxprofit`大, 如果是就更新`maxprofit=prices[i]-minprice`, 并且`minprice`即为波谷, `prices[i]`为波谷; 否的话继续处理下一个数组元素。
29+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def maxProfit(self, prices: List[int]) -> int:
3+
minprice = (1 << 31) -1
4+
maxprofit = 0
5+
for i in range(len(prices)):
6+
if prices[i] <= minprice:
7+
minprice = prices[i]
8+
elif prices[i] - minprice > maxprofit:
9+
maxprofit = prices[i] - minprice
10+
return maxprofit

solution/README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -476,8 +476,10 @@
476476
│   ├── Solution.java
477477
│   └── Solution2.cpp
478478
├── 0121.Best Time to Buy and Sell Stock
479+
│   ├── README.md
479480
│   ├── Solution.java
480-
│   └── Solution.js
481+
│   ├── Solution.js
482+
│   └── Solution.py
481483
├── 0122.Best Time to Buy and Sell Stock II
482484
│   ├── Solution.cpp
483485
│   ├── Solution.java

0 commit comments

Comments
 (0)