[leetcode]376. Wiggle Subsequence -- JavaScript代码
来源:互联网 发布:ubuntu14.04 软件源 编辑:程序博客网 时间:2024/06/16 07:50
这道题目的要求是:
给定一个数组,要求不改变元素顺序,从这个数组里找到一个最长子数组,该子数组中的元素要求一大一小的依次排列。返回值就是这个最长子数组的长度。
这道题给的标签是DP和贪心算法。
PS:代码效率不算很高,欢迎大家改进指正。
JavaScript代码如下:
/** * @param {number[]} nums * @return {number} */var wiggleMaxLength = function(nums) { var wiggle = []; if(nums.length===0){ return 0; } if(nums.length==1){ return 1; } if(nums[0]>nums[1]){ high = nums[0]; low = nums[1]; flag = 0;// 0表示需要升高,1表示需要下降 }else if(nums[0]<nums[1]){ high = nums[1]; low = nums[0]; flag = 1;// 0表示需要升高,1表示需要下降 }else{ high = low = nums[0]; wiggle.push(nums[0]); flag = 2;// 2表示未知 } nums.forEach(function(item){ if(flag===0){ if(item>low){ high = item; wiggle.push(item); flag = 1; }else if(item<low){ low = item; wiggle.pop(); wiggle.push(item); } }else if(flag==1){ if(item<high){// 需要下降 low = item; wiggle.push(item); flag = 0; }else if(item>high){ high = item; wiggle.pop(); wiggle.push(item); } }else{ if(item>low){ flag = 0; }else if(item<high){ flag = 1; } } }); return wiggle.length;};
思路1:首先,要考虑给定数组只有1个或没有元素的特殊情况。
思路2:用flag,high,low来记录数据——flag:现在是需要找比上一个元素大的数字,还是需要找比上一个元素小的数字。high/low:当需要找比上一个元素小(大)的下一个元素的时候,那个用来做比较的“上一个元素 ”。
但是这里,需要一点贪心算法的思路:例如,当我们要寻找比上一个元素小的元素的时候,如果遇到的不是更小的元素,反而是更大的元素,那么我们就应该用这个更大的元素来替代上一个元素。这样,就放宽了对下一个小元素的要求范围,可以期望得到更优的答案。
思路3:需要考虑如果元素都相等要怎么办?这就是flag = 2的作用。
0 0
- [leetcode]376. Wiggle Subsequence -- JavaScript代码
- leetcode 376. Wiggle Subsequence
- leetcode 376. Wiggle Subsequence
- [leetcode] 376. Wiggle Subsequence
- [LEETCODE] 376. Wiggle Subsequence
- [leetcode] 376. Wiggle Subsequence
- [leetcode] 376. Wiggle Subsequence
- LeetCode 376. Wiggle Subsequence
- leetcode 376. Wiggle Subsequence
- 376.[LeetCode]Wiggle Subsequence
- [Leetcode]376. Wiggle Subsequence
- leetcode-376. Wiggle Subsequence
- Leetcode 376. Wiggle Subsequence
- leetcode 376. Wiggle Subsequence
- LeetCode 376. Wiggle Subsequence
- [LeetCode]376. Wiggle Subsequence
- 【LeetCode】 376. Wiggle Subsequence
- leetcode 376. Wiggle Subsequence
- Hadoop多用户资源管理–Fair Scheduler介绍与配置
- 仿QQ音乐常驻底部栏播放按钮效果
- PAT(A) - 1005. Spell It Right (20)
- java 继承
- Parcelable接口
- [leetcode]376. Wiggle Subsequence -- JavaScript代码
- prop()与attr()区别
- android studio 快捷键
- java 内部类
- Cpp环境【NOIP2011普及组】【Vijos1787】 瑞士轮
- 矩阵
- DataSet和DataTable
- Neo4j介绍与使用
- Tomcat热加载的三种方式