zoukankan      html  css  js  c++  java
  • Longest Increasing Subsequence

    Description

    Given a sequence of integers, find the longest increasing subsequence (LIS).

    You code should return the length of the LIS.

    找出最长的递增子序列,遍历数组,如果是以当前元素为起点的话,那么比如说, {1,4,2, 3, 5}这个数组,处理起来就比较麻烦。不妨换个思路:以当前元素作为序列的结尾,看它前面有多少个元素比它要小的。我们可以引入一个辅助数组counts[length], 其中counts[i]表示,在下标为i的元素前,有counts[i]个元素比它要小。counts数组内,每个元素的初始值都为1:

    1  4  2  3  5

    首先1为末尾,前面没有数比它要小,所以counts[0] == 1;然后到4为末尾,前面有个1比它小,那么counts[1] = counts[1] > counts[0]+1:counts[1]:counts[0]+1;

    ...

    到5为末尾,首先1比它要小:counts[4] = counts[4]>counts[0]+1:counts[4]:counts[0]+1;然后关键是4和2: 4比它小:counts[4] = counts[4]>counts[1]+1?counts[4]:counts[1]+1; 此时counts[4]的值是2, 2比5要小:counts[4] = counts[4]>counts[2]+1?counts[4]:counts[2]+1;

    可以注意到,此时counts[4]的值是没有更新的,此时,我们可以假设(注意,只是假设)前面的子序列为1,2,然后再继续进行前面的操作。最终,我们可以得到正确的结果,但是子序列并不一定是对的,因为这个方法,照过程来看,其实子序列是1,4,3,5。

    public class Solution {
        /**
         * @param nums: An integer array
         * @return: The length of LIS (longest increasing subsequence)
         */
        public int longestIncreasingSubsequence(int[] nums) {
            // write your code here
            int length  = nums.length;
            if(length == 0){
                return 0;
            }
            int[] dp = new int[length];
            int res = 0;
            for(int end = 0; end < length; end++){
                dp[end] = 1;
                for(int start = 0; start < end; start++){
                    if(nums[start] < nums[end]){
                        dp[end] = dp[end] > dp[start]+1 ? dp[end] : dp[start]+1;
                    }
                }
                res = res > dp[end] ? res : dp[end];
            }
            return res;
        }
    }
  • 相关阅读:
    PL/SQL Developer保存自定义界面布局
    SQL Server 2008中SQL增强之二:Top新用途
    泛型和集合
    Go语言
    软件架构师培训
    using的几种用法
    【十五分钟Talkshow】如何善用你的.NET开发环境
    心的感谢
    【缅怀妈妈系列诗歌】之四:妈妈,对不起
    PDA开发经验小结 (转共享)
  • 原文地址:https://www.cnblogs.com/WakingShaw/p/12915431.html
Copyright © 2011-2022 走看看