package chapter_4_recursionanddp;
public class Problem_05_LIS {
public static int[] lis1(int[] arr) {
if (arr == null || arr.length == 0) {
return null;
}
int[] dp = getdp1(arr);
return generateLIS(arr, dp);
}
public static int[] getdp1(int[] arr) {
int[] dp = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (arr[i] > arr[j]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
return dp;
}
public static int[] generateLIS(int[] arr, int[] dp) {
int len = 0;
int index = 0;
for (int i = 0; i < dp.length; i++) {
if (dp[i] > len) {
len = dp[i];
index = i;
}
}
int[] lis = new int[len];
lis[--len] = arr[index];
for (int i = index; i >= 0; i--) {
if (arr[i] < arr[index] && dp[i] == dp[index] - 1) {
lis[--len] = arr[i];
index = i;
}
}
return lis;
}
public static int[] lis2(int[] arr) {
if (arr == null || arr.length == 0) {
return null;
}
int[] dp = getdp2(arr);
return generateLIS(arr, dp);
}
public static int[] getdp2(int[] arr) {
int[] dp = new int[arr.length];
int[] ends = new int[arr.length];
ends[0] = arr[0];
dp[0] = 1;
int right = 0;
int l = 0;
int r = 0;
int m = 0;
for (int i = 1; i < arr.length; i++) {
l = 0;
r = right;
while (l <= r) {
m = (l + r) / 2;
if (arr[i] > ends[m]) {
l = m + 1;
} else {
r = m - 1;
}
}
right = Math.max(right, l);
ends[l] = arr[i];
dp[i] = l + 1;
}
return dp;
}
// for test
public static void printArray(int[] arr) {
for (int i = 0; i != arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = { 2, 1, 5, 3, 6, 4, 8, 9, 7 };
printArray(arr);
printArray(lis1(arr));
printArray(lis2(arr));
}
}
Problem_05_LIS
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門岂座,熙熙樓的掌柜王于貴愁眉苦臉地迎上來态蒂,“玉大人,你說我怎么就攤上這事费什〖鼗郑” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵鸳址,是天一觀的道長瘩蚪。 經(jīng)常有香客問我,道長稿黍,這世上最難降的妖魔是什么疹瘦? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮巡球,結(jié)果婚禮上言沐,老公的妹妹穿的比我還像新娘。我一直安慰自己辕漂,他們只是感情好呢灶,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钉嘹,像睡著了一般鸯乃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跋涣,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼利赋!你這毒婦竟也來了水评?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布祭往,位于F島的核電站伦意,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏硼补。R本人自食惡果不足惜驮肉,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望已骇。 院中可真熱鬧离钝,春花似錦、人聲如沸褪储。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽鲤竹。三九已至浪读,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辛藻,已是汗流浹背碘橘。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 基本的:求長度 一隊可排序的數(shù)據(jù)规揪,求出其中最長的子序列:一個一個隨便順著挑犹撒,其中有序的,最長的粒褒,就是最長子序列。比...
- The Subset Sum Problem ——回溯算法求解子集合類問題 遞歸環(huán)節(jié)思路: 1. 從選項庫中迭代選...