Skip to content

Commit 4c4e548

Browse files
authored
Update Readme.md
1 parent 048e215 commit 4c4e548

File tree

1 file changed

+7
-3
lines changed
  • Dynamic_Programming/376.Wiggle-Subsequence

1 file changed

+7
-3
lines changed

Dynamic_Programming/376.Wiggle-Subsequence/Readme.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,15 @@
2626
2727
#### 解法2:DP
2828
29-
设计两个状态变量:p表示截止目前为止,最后一个元素是上升趋势的最长wiggle子序列;q表示截止目前为止,最后一个元素时下降趋势的最长wiggle子序列
29+
设计两个状态变量:p表示截止目前为止,最后一个元素是上升趋势的最长wiggle子序列;q表示截止目前为止,最后一个元素是下降趋势的最长wiggle子序列
3030
31-
每查看一个数字,尝试更新两个变量p和q。当nums[i]比nums[i-1]大时,意味着q对应的序列之后又出现了一个上升段,说明可以更新p,即p=q+1。当nums[i]比nums[i-1]小时,意味着p对应的序列之后又出现了一个下降段,说明可以更新q,即p=q+1
31+
首先我们要有这样一个概念。无论当前元素x是什么,p序列的最后一个元素要么是x,要么只能是在x前面、但是比x大的元素。反证:如果存在一个元素y在x前面、且比x要小,那么这个将y从p序列的结尾里去掉、改成x加入p序列的结尾,同样不影响p序列的性质和长度。同理,无论当前元素x是什么,q序列的最后一个元素要么是x,要么只能是在x前面、但是比x小的元素。
32+
33+
回到我们的问题。我们每查看一个数字,尝试更新两个变量p和q。当nums[i]>nums[i-1]大时,由前面可知,原先q序列的结尾元素一定比nums[i]小,于是再接上nums[i]的话q序列一定不会变的更长。同时,原先q序列的结尾一定比nums[i]小,接上nums[i]之后,就可以得到一个新的p的序列。故有```q不变,p=q+1```.
34+
35+
类似地,当nums[i]<nums[i-1]小时,由前面可知,原先p序列的结尾元素一定比nums[i]大,于是再接上nums[i]的话p序列一定不会变的更长。同时,原先p序列的结尾一定比nums[i]大,接上nums[i]之后,就可以得到一个新的q的序列。故有```p不变,q=p+1```.
3236
3337
因为无法确定最长wiggle序列的最后一段是上升还是下降,因此最后的答案是在p和q之间选最大值。
3438
3539
36-
[Leetcode Link](https://leetcode.com/problems/wiggle-subsequence)
40+
[Leetcode Link](https://leetcode.com/problems/wiggle-subsequence)

0 commit comments

Comments
 (0)