From 6544a1c75d034bdf21bac8065f3022f85d722be0 Mon Sep 17 00:00:00 2001 From: Hinsteny Date: Thu, 20 Jun 2019 20:46:15 +0800 Subject: [PATCH 1/3] Add Solution.py for 0121.Best Time to Buy and Sell Stock --- .../README.md | 31 +++++++++++++++++++ .../Solution.py | 10 ++++++ solution/README.md | 4 ++- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 solution/0121.Best Time to Buy and Sell Stock/README.md create mode 100644 solution/0121.Best Time to Buy and Sell Stock/Solution.py diff --git a/solution/0121.Best Time to Buy and Sell Stock/README.md b/solution/0121.Best Time to Buy and Sell Stock/README.md new file mode 100644 index 0000000000000..4d83ad8f39506 --- /dev/null +++ b/solution/0121.Best Time to Buy and Sell Stock/README.md @@ -0,0 +1,31 @@ +## 买卖股票的最佳时机 +### 题目描述 + +给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 + +如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 + +注意你不能在买入股票前卖出股票。 + +**示例 1:** +``` +输入: [7,1,5,3,6,4] +输出: 5 +解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 + 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。 +``` + +**示例 2:** +``` +输入: [7,6,4,3,1] +输出: 0 +解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。 +``` + +### 解法 +可以将整个数组中的树画到一张折现图中, 需要求的就是从图中找到一个波谷和一个波峰, 使其二者的差值最大化(其中波谷点需要在波峰点之前)。 + +我们可以维持两个变量, 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]为波谷; 否的话继续处理下一个数组元素 + diff --git a/solution/0121.Best Time to Buy and Sell Stock/Solution.py b/solution/0121.Best Time to Buy and Sell Stock/Solution.py new file mode 100644 index 0000000000000..12f557a4fe7d0 --- /dev/null +++ b/solution/0121.Best Time to Buy and Sell Stock/Solution.py @@ -0,0 +1,10 @@ +class Solution: + def maxProfit(self, prices: List[int]) -> int: + minprice = (1 << 31) -1 + maxprofit = 0 + for i in range(len(prices)): + if prices[i] <= minprice: + minprice = prices[i] + elif prices[i] - minprice > maxprofit: + maxprofit = prices[i] - minprice + return maxprofit \ No newline at end of file diff --git a/solution/README.md b/solution/README.md index f8583b6b8777e..27ef1a02dcc52 100644 --- a/solution/README.md +++ b/solution/README.md @@ -476,8 +476,10 @@ │   ├── Solution.java │   └── Solution2.cpp ├── 0121.Best Time to Buy and Sell Stock +│   ├── README.md │   ├── Solution.java -│   └── Solution.js +│   ├── Solution.js +│   └── Solution.py ├── 0122.Best Time to Buy and Sell Stock II │   ├── Solution.cpp │   ├── Solution.java From b7bca5939a4a32025f3adb8577d64d7c41cb70fb Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Thu, 20 Jun 2019 21:17:44 +0800 Subject: [PATCH 2/3] Update README.md --- solution/0121.Best Time to Buy and Sell Stock/README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/solution/0121.Best Time to Buy and Sell Stock/README.md b/solution/0121.Best Time to Buy and Sell Stock/README.md index 4d83ad8f39506..1363ca4012b1c 100644 --- a/solution/0121.Best Time to Buy and Sell Stock/README.md +++ b/solution/0121.Best Time to Buy and Sell Stock/README.md @@ -23,9 +23,7 @@ ``` ### 解法 -可以将整个数组中的树画到一张折现图中, 需要求的就是从图中找到一个波谷和一个波峰, 使其二者的差值最大化(其中波谷点需要在波峰点之前)。 +可以将整个数组中的数画到一张折现图中, 需要求的就是从图中找到一个波谷和一个波峰, 使其二者的差值最大化(其中波谷点需要在波峰点之前)。 -我们可以维持两个变量, 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]为波谷; 否的话继续处理下一个数组元素 +我们可以维持两个变量, 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]`为波谷; 否的话继续处理下一个数组元素。 From fcba23757728d5da80b6b0c8370791e84c02e6c1 Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Thu, 20 Jun 2019 21:18:25 +0800 Subject: [PATCH 3/3] Update README.md --- solution/0121.Best Time to Buy and Sell Stock/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solution/0121.Best Time to Buy and Sell Stock/README.md b/solution/0121.Best Time to Buy and Sell Stock/README.md index 1363ca4012b1c..ed70d90dbf92b 100644 --- a/solution/0121.Best Time to Buy and Sell Stock/README.md +++ b/solution/0121.Best Time to Buy and Sell Stock/README.md @@ -25,5 +25,5 @@ ### 解法 可以将整个数组中的数画到一张折现图中, 需要求的就是从图中找到一个波谷和一个波峰, 使其二者的差值最大化(其中波谷点需要在波峰点之前)。 -我们可以维持两个变量, 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]`为波谷; 否的话继续处理下一个数组元素。 +我们可以维持两个变量, 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]`为波谷; 否的话继续处理下一个数组元素。