lintcode:最长上升子序列
2016-01-13 22:05
253 查看
题目
最长上升子序列
给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。样例
给出[5,4,1,2,3],这个LIS是[1,2,3],返回 3
给出[4,2,4,5,3,7],这个LIS是[4,4,5,7],返回 4
挑战
要求时间复杂度为O(n^2) 或者O(nlogn)
说明
最长上升子序列的定义:
最长上升子序列问题是在一个无序的给定序列中找到一个尽可能长的由低到高排列的子序列,这种子序列不一定是连续的或者唯一的。
https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
解题
下面是很久前复制网上的程序
public class Solution { /** * @param nums: The integer array * @return: The length of LIS (longest increasing subsequence) */ public int longestIncreasingSubsequence(int[] nums) { int len = nums.length; if(nums == null || len ==0) return 0; ArrayList<Integer> dp = new ArrayList<Integer>(); for(int i=0;i<len ;i++){ if(dp.isEmpty() || dp.get(dp.size() - 1) <= nums[i]) dp.add(nums[i]); else{ int index = findFirstLargeEqual(dp,nums[i]); dp.set(index,nums[i]); } } return dp.size(); } public int findFirstLargeEqual(ArrayList<Integer> list,int num){ int left = 0; int right = list.size() - 1; while(left < right){ int mid = (left + right)/2; if(list.get(mid) <= num) left = mid + 1; else right = mid; } return left; } }
Java Code
Python
class Solution: """ @param nums: The integer array @return: The length of LIS (longest increasing subsequence) """ def longestIncreasingSubsequence(self, nums): # write your code here if nums == None or len(nums) ==0: return 0 lst = list() for i in range(len(nums)): if len(lst) == 0 or lst[len(lst) - 1] <= nums[i]: lst.append(nums[i]) else: index = self.findFirstLargeEqual(lst,nums[i]) lst[index] = nums[i] return len(lst) def findFirstLargeEqual(self,lst,target): left = 0 right = len(lst) -1 while left < right: mid = (left + right)/2 if lst[mid] <= target: left = mid + 1 else: right = mid return left
相关文章推荐
- Windows开启NTP服务
- 寒假第二弹之莫比乌斯反演
- 【年终总结】畅途网
- 关于浮点数转换为整数的测试
- 初窥c++11:lambda函数及其用法
- iOS开发中图片的一些处理操作(背景色,透明度,合成,大小)
- 用树莓派DIY天气检测站
- linux:英文界面转中文
- IAR-项目目录与头文件目录
- virt viewer Usbredir USB重定向
- Jsoup的select选择器
- SpringMVC——ViewResolver
- js中substr,substring,indexOf,lastIndexOf,split 的用法
- PermGen space错误解决方法
- 用JS打开网页时自动更改css样式,可用于处理浏览器兼容
- 12小时包你学会基于ReactMix框架的ReactNativeApp开发(一)Hello World!
- Python 2.5.12 匿名函数
- 华为oj 名字漂亮度
- C++开发人脸性别识别教程(11)——图片人脸检测程序BUG处理
- [Java] 解决spring的xml标签内不能自由增加说明的难题,方便调试、部署时进行批量屏蔽