LIS 最長遞增子串行

2021-07-14 20:31:32 字數 597 閱讀 8948

最長遞增子串行可以用動態規劃的方法,時間複雜度是o(n*n),也可以用二分查詢的方法,時間複雜度是o(nlogn)。

首先看二分查詢的方法:思路是,順序插入資料,當插入的資料大於以往的任何值時,插入到最後,若插入的資料不是大於以往的任何值時,首先找到大於要插入資料的乙個值,然後,將要插入的資料將該值替換掉。因為找到替換的值的複雜度為o(logn),要進行n次插入,所以時間複雜度是o(nlogn)。

//時間複雜度為o(nlogn)

public static int lis(int arr)elseelse

}temp[low] = arr[i];

}} system.out.println(arrays.tostring(temp));

return top;

}//時間複雜度為o(n*n)

public static int lis2(int arr)

}dp[i] = max+1;

} int tmp=0;

for(int i=0;itmp) tmp = dp[i];

} return tmp;

}

最長遞增子串行 LIS

對於這個問題,最直觀的dp方法是cnt i 表示以height i 結束的最長遞增子串行的元素的個數,遞迴方程是cnt i max for max i 0 i求出整個數列的最長遞增子串行的長度 if b i max max b i cout return 0 顯然,這種方法的時間複雜度仍為o n 2...

最長遞增子串行 LIS

給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為6的陣列a,則其最長的單調遞增子串行為,長度為4.這個問題可以轉換為最長公共子串行問題。如例子中的陣列a,則我們排序該陣列得到陣列a 然後找出陣列a和a 的最長公共子串行即可。顯然這裡最長公共子串行...

最長遞增子串行(LIS)

300.longest increasing subsequence good 給定乙個長度為n的陣列,找出乙個最長的單調遞增子串行 不一定連續,當時先後順序不能亂 更正式的定義是 設l 是n個不同的實數的序列,l的遞增子串行是這樣乙個子串行lin 其中k1。比如陣列a 為,那麼最長遞增子串行為。以...