zoukankan      html  css  js  c++  java
  • Leetcode376.摆动序列

    问题描述

    如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。

    例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。

    给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元素来获得子序列,剩下的元素保持其原始顺序。

    示例 1:

    输入: [1,7,4,9,2,5]
    输出: 6 
    解释: 整个序列均为摆动序列。
    

    示例 2:

    输入: [1,17,5,10,13,15,10,5,16,8]
    输出: 7
    解释: 这个序列包含几个长度为 7 摆动序列,其中一个可为[1,17,10,13,10,16,8]。
    

    示例 3:

    输入: [1,2,3,4,5,6,7,8,9]
    输出: 2
    进阶:
    你能否用 O(n) 时间复杂度完成此题?
    

    代码

    class Solution {
        public int wiggleMaxLength(int[] nums) {
    		if(nums.length<2) {
    			 return nums.length;
    		 }
    			 int num;
    			 int start=-1;
    			 for(int i=0;i<nums.length-1;i++) {
    				 if(nums[i]!=nums[i+1])
    					 {
    					 start=i;
    					 break;
    					 }
    			 }
    			 if(start==-1)
    				 return 1;
                     num=2;
    		 	boolean flag=nums[start+1]<nums[start];//true表示下降
    		 	for(int i=start;i<nums.length-1;i++) {
    		 		if(flag==true&&nums[i+1]>nums[i]) {
    		 				flag=!flag;
    		 				num++;
    		 		}
    		 		if(flag==false&&nums[i]>nums[i+1]) {
    		 				flag=!flag;
    		 				num++;
    		 		}
    		 	}
    		 	return num;
    	    }
    }
    

  • 相关阅读:
    Jenkins安装2
    11月14 vagrant 虚拟机连接
    11月13 ssh 和 netstat
    Jenkins安装
    11月12号 springboot1.5 引入redis
    11月12号 用户登录输入密码错误达到指定次数后,锁定账户 004
    js模式-观察者模式
    立即执行函数
    vue 获取数据
    在登陆退出时候使用Vuex
  • 原文地址:https://www.cnblogs.com/code-fun/p/14498331.html
Copyright © 2011-2022 走看看