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

    Given an unsorted array of integers, find the length of longest increasing subsequence.

    Example:

    Input: [10,9,2,5,3,7,101,18]
    Output: 4 
    Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4. 

    Note:

    • There may be more than one LIS combination, it is only necessary for you to return the length.
    • Your algorithm should run in O(n2) complexity.

    Follow up: Could you improve it to O(n log n) time complexity?

    最长递增子序列

    C++(4ms):二分

     1 class Solution {
     2 public:
     3     int lengthOfLIS(vector<int>& nums) {
     4         vector<int> tails(nums.size() , 0) ;
     5         int len = 0 ;
     6         for(int num : nums){
     7             int index = binarySearch(tails,len,num) ;
     8             tails[index] = num ;
     9             if (index == len){
    10                 len++ ;
    11             }
    12         }
    13         return len ;
    14     }
    15     
    16     int binarySearch(vector<int> tails , int len , int num){
    17         int left = 0 ;
    18         int right = len ;
    19         while(left < right){
    20             int mid = left + (right - left) / 2 ;
    21             if (tails[mid] == num){
    22                 return mid ;
    23             }else if(tails[mid] < num){
    24                 left = mid + 1 ;
    25             }else{
    26                 right = mid ;
    27             }
    28         }
    29         return left ;
    30     }
    31 };

    C++(20ms):dp

     1 class Solution {
     2 public:
     3     int lengthOfLIS(vector<int>& nums) {
     4         vector<int> dp(nums.size() , 0) ;
     5         int res = 0 ;
     6         for(int i = 0 ; i < nums.size() ; i++){
     7             int dpMax = 0 ;
     8             for(int j = 0 ; j < i ; j++){
     9                 if (nums[i] > nums[j]){
    10                     dpMax = max(dpMax , dp[j]) ;
    11                 }
    12             }
    13             dp[i] = dpMax + 1 ;
    14             res = max(res,dp[i]) ;
    15         }
    16         
    17         return res ;
    18     }
    19 };
  • 相关阅读:
    面向对象(静态)
    面向对象 三大特性
    MySQL数据库表分区功能详解
    zabbix 库表介绍
    数据库分库分表思路
    Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
    zabbix 监控 tomcat
    zabbix 监控项报"Value "(No info could be read for "-p": geteuid()=1002 but you should be root"
    Linux中Swap与Memory内存简单介绍
    mysql常用命令杂记
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/10270744.html
Copyright © 2011-2022 走看看