[Leetcode 376]摇摆序列 Wiggle Subsequence
【題目】
A sequence of numbers is called a?wiggle sequence?if the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either positive or negative. A sequence with fewer than two elements is trivially a wiggle sequence.
For example,?[1,7,4,9,2,5]?is a wiggle sequence because the differences?(6,-3,5,-7,3)?are alternately positive and negative. In contrast,?[1,4,7,2,5]?and?[1,7,4,5,5]?are not wiggle sequences, the first because its first two differences are positive and the second because its last difference is zero.
Given a sequence of integers, return the length of the longest subsequence that is a wiggle sequence. A subsequence is obtained by deleting some number of elements (eventually, also zero) from the original sequence, leaving the remaining elements in their original order.
【思路】
DP/貪心都可以,貪心更簡單。
核心比較A[i+2]-A[i+1]和A[i+1]-A[i]是否異號,是則cnt++,否則i++循環。
兩個指針和一個循環,特殊情況只有兩個元素的數組單獨討論。
才發現可以插入代碼!!好看多了……!
【代碼】
class Solution {public int wiggleMaxLength(int[] nums) {if (nums.length<2)return nums.length;int p1=nums[1]-nums[0];int cnt=p1!=0?2:1;for(int i=2;i<nums.length;i++){int p2=nums[i]-nums[i-1];if((p1<=0&&p2>0)||(p1>=0&&p2<0)){p1=p2;cnt++;}}return cnt;} }【舉例】
Example 1:
Input: [1,7,4,9,2,5] Output: 6 Explanation: The entire sequence is a wiggle sequence.Example 2:
Input: [1,17,5,10,13,15,10,5,16,8] Output: 7 Explanation: There are several subsequences that achieve this length. One is [1,17,10,13,10,16,8].Example 3:
Input: [1,2,3,4,5,6,7,8,9] Output: 2轉載于:https://www.cnblogs.com/inku/p/9935839.html
總結
以上是生活随笔為你收集整理的[Leetcode 376]摇摆序列 Wiggle Subsequence的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql读锁和写锁
- 下一篇: poi实现Excel导入导出依赖