題一:求數組中最長遞增子序列。
利用動態規劃解題。
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