码迷,mamicode.com
首页 > 其他好文 > 详细

300. Longest Increasing Subsequence

时间:2018-05-08 17:43:58      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:字符   输入   位置   search   image   png   for   .com   style   

技术分享图片

 

该题是要求出字符串中最长的递增子序列的长度。第一种方法的解决思路是动态规划,定义一个与输入数组等长的整型数组,用于记录在该位置前的最长递增子序列长度。

代码如下:

 

 1 class Solution {
 2     public int lengthOfLIS(int[] nums) {
 3         
 4         if(nums.length == 0){
 5             return 0;
 6         }
 7         
 8         int[] fn = new int[nums.length];
 9         int len = 1;
10         
11         for(int i = 0 ; i < fn.length ; i++){
12             fn[i] = 1;
13         }
14         
15         
16         for(int i = 1 ; i < nums.length ; i++){
17             int maxvar = 0;
18             for(int j = 0; j < i ; j++){
19                 if(nums[i] > nums[j]){
20                     maxvar = Math.max(maxvar, fn[j]);
21                 }
22             }
23             fn[i] = maxvar + fn[i];
24             len = Math.max(len, fn[i]);
25         }
26         
27         return len;
28     }
29 }

 

还有一个就是使用二分查找的方法。

代码如下:

 

 1 class Solution {
 2     public int lengthOfLIS(int[] nums) {
 3         
 4         if(nums.length == 0){
 5             return 0;
 6         }
 7         
 8         int[] fn = new int[nums.length];
 9         int len = 0;
10         
11         for(int num : nums){
12             int i = Arrays.binarySearch(fn, 0, len, num);
13             
14             if( i < 0){
15                 i = -(i+1);
16             }
17             
18             fn[i] = num;
19             if( i == len){
20                 len++;
21             }
22         }
23         
24         return len;
25     }
26 }

 

 

END

300. Longest Increasing Subsequence

标签:字符   输入   位置   search   image   png   for   .com   style   

原文地址:https://www.cnblogs.com/sssysukww/p/9009222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!