面试基础算法题
Posted 怎么杀23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试基础算法题相关的知识,希望对你有一定的参考价值。
---恢复内容开始---
动态规划求数组中最长的上升序列(LongestIncreasingSubsequence)的个数,复杂度为O(n^2)。
例如:数组int arr[] = {7,3,5,9,4,6,8,10},最长上升序列应该为3,5,6,8,10或3,4,6,8,10 ,最终答案应该为5;
dp[i]表示数组中以下标i结尾的最长上升序列的个数,则原问题就转换为了求所有dp[i](0<=i<len)中的最大值;
而每一个dp[i]又是以下标i结尾的所有序列中最长上升序列的个数。
import java.util.Scanner;
public class Main
{
public static void main(String[] args) throws Exception
{
Scanner sc = new Scanner(System.in);
while(sc.hasNext())
{
int n = sc.nextInt();
int[] arr = new int[n];
for(int i= 0;i<n;i++)
{
arr[i] = sc.nextInt();
}
System.out.println(maxLIS(arr));
}
}
public static int maxLIS(int[] arr)
{
int max = 1;
int len = arr.length;
int[] dp = new int[len];
dp[0] = 1;
for(int i=1;i<len;i++)
{
for(int j =0;j<i;j++)
{
if(arr[i]>arr[j])
dp[i] = Math.max(dp[i],dp[j]+1);
}
max = Math.max(dp[i],max);
}
return max;
}
}
---恢复内容结束---
以上是关于面试基础算法题的主要内容,如果未能解决你的问题,请参考以下文章