From bec57550df7a01fccb7fe060ce569e499285a134 Mon Sep 17 00:00:00 2001 From: roylx <73628821+roylx@users.noreply.github.com> Date: Thu, 10 Nov 2022 17:27:45 -0700 Subject: [PATCH 1/5] =?UTF-8?q?Update=200376.=E6=91=86=E5=8A=A8=E5=BA=8F?= =?UTF-8?q?=E5=88=97.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加python动态规划优化版 --- problems/0376.摆动序列.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/problems/0376.摆动序列.md b/problems/0376.摆动序列.md index 214ff311..f9d3f97f 100644 --- a/problems/0376.摆动序列.md +++ b/problems/0376.摆动序列.md @@ -264,6 +264,25 @@ class Solution: return max(dp[-1][0], dp[-1][1]) ``` +```python +class Solution: + def wiggleMaxLength(self, nums: List[int]) -> int: + # up i作为波峰最长的序列长度 + # down i作为波谷最长的序列长度 + n = len(nums) + # 长度为0和1的直接返回长度 + if n<2: return n + for i in range(1,n): + if nums[i]>nums[i-1]: + # nums[i] 为波峰,1. 前面是波峰,up值不变,2. 前面是波谷,down值加1 + # 目前up值取两者的较大值(其实down+1即可,可以推理前一步down和up最多相差1,所以down+1>=up) + up = max(up, down+1) + elif nums[i] Date: Mon, 14 Nov 2022 15:00:07 -0700 Subject: [PATCH 2/5] =?UTF-8?q?Update=200121.=E4=B9=B0=E5=8D=96=E8=82=A1?= =?UTF-8?q?=E7=A5=A8=E7=9A=84=E6=9C=80=E4=BD=B3=E6=97=B6=E6=9C=BA.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加了python 动态规划:版本三 --- problems/0121.买卖股票的最佳时机.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/problems/0121.买卖股票的最佳时机.md b/problems/0121.买卖股票的最佳时机.md index 63ac5d04..cf17f48d 100644 --- a/problems/0121.买卖股票的最佳时机.md +++ b/problems/0121.买卖股票的最佳时机.md @@ -310,6 +310,18 @@ class Solution: return dp[(length-1) % 2][1] ``` +> 动态规划:版本三 +```python +class Solution: + def maxProfit(self, prices: List[int]) -> int: + length = len(prices) + dp0, dp1 = -prices[0], 0 #注意这里只维护两个常量,因为dp0的更新不受dp1的影响 + for i in range(1, length): + dp1 = max(dp1, dp0 + prices[i]) + dp0 = max(dp0, -prices[i]) + return dp1 +``` + Go: > 贪心法: ```Go From 4261d96a144c91ba577a1a2c3bdad5fb7ce38696 Mon Sep 17 00:00:00 2001 From: roylx <73628821+roylx@users.noreply.github.com> Date: Tue, 15 Nov 2022 10:27:03 -0700 Subject: [PATCH 3/5] =?UTF-8?q?Update=200714.=E4=B9=B0=E5=8D=96=E8=82=A1?= =?UTF-8?q?=E7=A5=A8=E7=9A=84=E6=9C=80=E4=BD=B3=E6=97=B6=E6=9C=BA=E5=90=AB?= =?UTF-8?q?=E6=89=8B=E7=BB=AD=E8=B4=B9.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新Python贪心,更容易理解 --- .../0714.买卖股票的最佳时机含手续费.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/problems/0714.买卖股票的最佳时机含手续费.md b/problems/0714.买卖股票的最佳时机含手续费.md index 66fb9fb6..faa56d42 100644 --- a/problems/0714.买卖股票的最佳时机含手续费.md +++ b/problems/0714.买卖股票的最佳时机含手续费.md @@ -206,13 +206,13 @@ class Solution: # 贪心思路 result = 0 minPrice = prices[0] for i in range(1, len(prices)): - if prices[i] < minPrice: + if prices[i] < minPrice: # 此时有更低的价格,可以买入 minPrice = prices[i] - elif prices[i] >= minPrice and prices[i] <= minPrice + fee: - continue - else: - result += prices[i] - minPrice - fee + elif prices[i] > (minPrice + fee): # 此时有利润,同时假买入高价的股票,看看是否继续盈利 + result += prices[i] - (minPrice + fee) minPrice = prices[i] - fee + else: # minPrice<= prices[i] <= minPrice + fee, 价格处于minPrice和minPrice+fee之间,不做操作 + continue return result ``` From 6fb61ead0b5d723775958827e4d75a7199aecfe6 Mon Sep 17 00:00:00 2001 From: roylx <73628821+roylx@users.noreply.github.com> Date: Tue, 15 Nov 2022 11:01:24 -0700 Subject: [PATCH 4/5] =?UTF-8?q?Update=200055.=E8=B7=B3=E8=B7=83=E6=B8=B8?= =?UTF-8?q?=E6=88=8F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加Python for循环版 --- problems/0055.跳跃游戏.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/problems/0055.跳跃游戏.md b/problems/0055.跳跃游戏.md index 23357f21..0ed03b07 100644 --- a/problems/0055.跳跃游戏.md +++ b/problems/0055.跳跃游戏.md @@ -119,6 +119,18 @@ class Solution: return False ``` +```python +## for循环 +class Solution: + def canJump(self, nums: List[int]) -> bool: + cover = 0 + if len(nums) == 1: return True + for i in range(len(nums)): + cover = max(i + nums[i], cover) + if cover >= len(nums) - 1: return True + return False +``` + ### Go ```Go func canJUmp(nums []int) bool { From c0f1f13669a479f6ec8d0bfe6a0b1156213363d5 Mon Sep 17 00:00:00 2001 From: roylx <73628821+roylx@users.noreply.github.com> Date: Tue, 15 Nov 2022 11:05:39 -0700 Subject: [PATCH 5/5] =?UTF-8?q?Update=200055.=E8=B7=B3=E8=B7=83=E6=B8=B8?= =?UTF-8?q?=E6=88=8F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit python for循环版,添加了更新cover的条件 --- problems/0055.跳跃游戏.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/problems/0055.跳跃游戏.md b/problems/0055.跳跃游戏.md index 0ed03b07..80c35c03 100644 --- a/problems/0055.跳跃游戏.md +++ b/problems/0055.跳跃游戏.md @@ -126,8 +126,9 @@ class Solution: cover = 0 if len(nums) == 1: return True for i in range(len(nums)): - cover = max(i + nums[i], cover) - if cover >= len(nums) - 1: return True + if i <= cover: + cover = max(i + nums[i], cover) + if cover >= len(nums) - 1: return True return False ```