最长子序列

来源:互联网 发布:温哥华华人 知乎 编辑:程序博客网 时间:2024/05/21 11:07

求一个数组的最长递增子序列,如果数组为1,4,2,3,5,那么最长子序列为1,2,3,5,长度为4,求任意数组的最长子序列长度。

可以用一个数组来保存当前位置的最小子序列,如果r[i]>r[j],那么r[i]处的最长递增子序列就是r[j]处加1,所以要求一个n长数组的最长递增子序列,可以先求n-1长度的最长递增子序列,以此类推,可以算出,算法复杂度O(n*n)。

private static int longSubsequence(int[] r){        if(r.length==0) return 0;        int ans = 0;        int []dp = new int[r.length];        for(int i=0;i<r.length;i++){            dp[i] = 0;        }        for(int i=0;i<r.length;i++){            ans = dp[i];            for(int j=0;j<i;j++){                if(r[i]>r[j]&&dp[j]>ans){                    ans = dp[j];                }            }            dp[i] = ans+1;        }        for(int i=0;i<dp.length;i++){            if(dp[i]>ans){                ans = dp[i];            }        }        return ans;    }


0 0
原创粉丝点击