單調遞增的子串行

2021-09-11 10:55:56 字數 1002 閱讀 7516

方法一   轉化為lcs最長公共字串 

方法二    動態規劃

方法三   陣列+二分查詢

方法一對單調遞增的子串行x排序得到子串行y,然後求子序列x與子串行y的最長公共字串

方法二  動態規劃

1. 先準備乙個陣列b b[i]=1

2. b[i]=max(b[i],b[j]+1);        arr[j]動態規劃時間複雜度o(n^2)

/**

* 最長公共子串行 時間複雜度o(n^2)

* @param arr

* @return

*/public static int longestincreasingsubsequence(int arr)

}return max;

}public static void main(string args) ;

int i = longestincreasingsubsequence(arr);

system.out.println(i);

}

方法三 

陣列+二分查詢的核心思想:  陣列記錄中間元素,二分查詢每次查詢比當前大的第乙個元素,並替換.

動態規劃 時間複雜度o(nlogn)

**

public static int lis(int array)  else 

}return len;

}//修改的二分查詢演算法,返回陣列元素需要插入的位置。

public static int bisearch(int b, int len, int w)

return left;//陣列b中不存在該元素,則返回該元素應該插入的位置

}public static void main(string args) ;

int lis = lis(array);

system.out.println(lis);

}

參考文獻

時間複雜度o(nlogn)

最長單調遞增子串行

單調子串行包含有單調遞增子串行和遞減子串行,不失一般性,這裡只討論單調遞增子串行。首先,從定義上明確我們的問題。給定序列a1,a2,an,如果存在滿足下列條件的子串行 ai1 ai2 aim,其中i1即稱為乙個原序列的長度為m的單調遞增子串行,那麼,現在的問題是我們要找出乙個序列的最長的單調遞增子串...

單調遞增最長子序列

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 求乙個字串的最長遞增子串行的長度 如 dabdbf最長遞增子串行就是abdf,長度為4 輸入第一行乙個整數0 輸出輸出字串的最長遞增子串行的長度 樣例輸入 3 aaaababc abklmncdefg 樣例輸出 1 37 經典題...

單調遞增最長子序列

時間限制 3000 ms 記憶體限制 65535kb 難度 4 描述 求乙個字串的最長遞增子串行的長度 如 dabdbf最長遞增子串行就是abdf,長度為4 輸入 第一行乙個整數0 隨後的n行,每行有乙個字串,該字串的長度不會超過10000 輸出 輸出字串的最長遞增子串行的長度 樣例輸入 3 aaa...