zoukankan      html  css  js  c++  java
  • LeetCode 376. Wiggle Subsequence

    原题链接在这里:https://leetcode.com/problems/wiggle-subsequence/description/

    题目:

    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.

    Examples:

    Input: [1,7,4,9,2,5]
    Output: 6
    The entire sequence is a wiggle sequence.
    
    Input: [1,17,5,10,13,15,10,5,16,8]
    Output: 7
    There are several subsequences that achieve this length. One is [1,17,10,13,10,16,8].
    
    Input: [1,2,3,4,5,6,7,8,9]
    Output: 2

    Follow up:
    Can you do it in O(n) time?

    题解:

    up表示到目前为止longest最后是上升的wiggle subsequence长度.

    down表示到目前为止longest最后是下降的wiggle subsequence长度.

    递推时, 若num[i] > nums[i-1], 就用之前下降的最长wiggle subsequence长度+1.

    若nums[i] < nums[i-1], 就用之前上升的最长wiggle subsequence长度+1.

    Time Complexity: O(nums.length).

    Space: O(1).

    AC Java:

     1 class Solution {
     2     public int wiggleMaxLength(int[] nums) {
     3         if(nums.length < 2){
     4             return nums.length;
     5         }
     6         int up = 1;
     7         int down = 1;
     8         for(int i = 1; i<nums.length; i++){
     9             if(nums[i] > nums[i-1]){
    10                 up = down+1;
    11             }else if(nums[i] < nums[i-1]){
    12                 down = up+1;
    13             }
    14         }
    15         return Math.max(up, down);
    16     }
    17 }
  • 相关阅读:
    windows server 2019安装
    python 求相关系数
    MySQL的Sleep进程占用大量连接解决方法
    mysql show processlist分析
    mysql5.6常用查询sql
    使用exe4j将java项目打成exe执行程序
    MediaWIKI部署流程
    谈谈Activiti中流程对象之间的关系
    EhCache RMI 分布式缓存/缓存集群
    Tomcat8安装, 安全配置与性能优化
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/7623155.html
Copyright © 2011-2022 走看看