面試題小結二

題一:求數組中最長遞增子序列。

利用動態規劃解題。

java源碼如下:

package test;

public class LongestSubArray {
	public static int getLongestSubArray(int[] array)
	{
		Integer[] lis = new Integer[array.length];
		for(int i = 0; i<array.length; i++)
		{
			lis[i]=1;
			for(int j=0; j<i; j++) {
				if(array[j]<array[i] && (lis[j]+1>lis[i])){
					lis[i]=lis[j]+1;		//更新lis[i]的值
				}
			}
		}
		
		int max=0;
		for(int k=0;k<lis.length;k++)
		{
			if(lis[k]>max)
			max=lis[k];
		}
		return max;
	}
	
	public static void main(String[] args) {
		int[] array = {1,-1,2,-3,4,-5,6,-7};
		int length = getLongestSubArray(array);
		System.out.println("the max longest sub array is: " + length);
	}
}

問題的關鍵是狀態轉移方程的建立。

具體參考文章3.講的比較清楚詳細。

注意:這裏只給出了最長子序列的長度,沒有輸出子序列的具體元素。


參考文章

1、http://blog.csdn.net/terry84fun/article/details/4807648

2、http://blog.csdn.net/joylnwang/article/details/6766317

3、http://www.cnblogs.com/lonelycatcher/archive/2011/07/28/2119123.html


發佈了139 篇原創文章 · 獲贊 19 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章