面试题小结二

题一:求数组中最长递增子序列。

利用动态规划解题。

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


你可能感兴趣的:(动态规划)