钦州建设局网站wordpress去除仪表盘
web/
2025/10/7 1:24:02/
文章来源:
钦州建设局网站,wordpress去除仪表盘,有道云笔记 同步 wordpress,建设网站烧钱03贪心#xff1a;摆动序列
376. 摆动序列
局部最优#xff1a;删除单调坡度上的节点#xff08;不包括单调坡度两端的节点#xff09;#xff0c;那么这个坡度就可以有两个局部峰值。
整体最优#xff1a;整个序列有最多的局部峰值#xff0c;从而达到最长摆动序列。…03贪心摆动序列
376. 摆动序列
局部最优删除单调坡度上的节点不包括单调坡度两端的节点那么这个坡度就可以有两个局部峰值。
整体最优整个序列有最多的局部峰值从而达到最长摆动序列。
局部最优推出全局最优并举不出反例那么试试贪心
实际操作上其实连删除的操作都不用做因为题目要求的是最长摆动子序列的长度所以只需要统计数组的峰值数量就可以了相当于是删除单一坡度上的节点然后统计长度
这就是贪心所贪的地方让峰值尽可能的保持峰值然后删除单一坡度上的节点
这是我们思考本题的一个大题思路但本题要考虑三种情况
情况一上下坡中有平坡情况二数组首尾两端情况三单调坡中有平坡 class Solution {//贪心要想成为摆动序列只需要吧每一条单调坡除峰值以外的其他元素删除即可局部最优那么整个数组就是摆动序列整体最优public int wiggleMaxLength(int[] nums) {//一般情况prediff记录左边的方向curdiff记录右边的方向如果两值一正一负则resultint prediff 0;int curdiff 0;int result 1;//2/*几点特殊情况1.上下坡中有平坡1 2 2 1 prediff 0,curdiff ! 0 12.考虑首尾元素1 2 这是两个长度假设数组是1 1 2起始位置左边假设是个平坡那么就满足第一种特殊情况可以加一另外总是假设数组的最右侧是一个长度因为它必是一个峰值23.单调坡中有平坡1 2 2 3 (我们判断的是最后一个数字也就是第二个2)对于第二个2来说prediff0curdiff!0,应该算一个但是并不是因为这不是上下坡我们怎么知道不是呢得通过prediff来判断如果这个prediff记录的是1 2之间的坡度我就能判断出来这不是答案也就是说prediff的更新下手解决解决办法当坡度有变化的时候再进行更新就是说result有变化的时候坡度就肯定有变化回到第一种特殊情况1 2 2 1prediff记录1 2 的坡度curdiff记录的是2 1的坡度符合*/for(int i 0; i nums.length - 1; i) {//因为假设最后一个数已经计算上了res1curdiff nums[i 1] - nums[i];//prediff * curdiff 0不行这只能保证两个坡度至少有一个为0如果是0 0的话就错了if((prediff 0 curdiff 0) || (prediff 0 curdiff 0)) {//1 如果curdiff等于0就不用管了向右遍历就可以了result;prediff curdiff;//3}//prediff curdiff;不用且不能实时更新}return result;}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88206.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!