您的位置:首页 > 产品设计 > UI/UE

LeetCode—300 Longest Increasing Subsequence

2015-11-06 14:24 549 查看
思路:遍历数组,建立另外一个数组维护,维护规则,每次读到的数跟这个数组有效距离最后一个数比较,如果比最后一个数大(或者该数组为空)则插入这个数,并使得有效长度+1;如果小于最后一个数,则在这个数组中找到第一个比自己大的数替换掉,如果发现这个数组中有跟自己相同的数,那么就不操作这个数。因为是有序数组,所以插入的时间复杂度为O(lgn);

public class Solution {
int[] ans;
int length=0;
public int lengthOfLIS(int[] nums) {
ans=new int[nums.length];
for (int i = 0; i < nums.length; i++) {
f(nums[i]);
}
return length;
}
public void f(int n){
if (length==0||ans[length-1]<n) {
ans[length]=n;
length++;
}else {
int s=0;
int e=length-1;
int m=(s+e)/2;
while (e-s>1) {
if(ans[m]==n){
return;
}
if (ans[m]>n) {
e=m;
}else {
s=m;
}
m=(s+e)/2;
}
if (ans[s]>n) {
ans[s]=n;
}else {
ans[e]=n;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: