zoukankan      html  css  js  c++  java
  • 合唱队, 华为

    最长上升子序列

    import java.util.*;
    public class Main {
        static int[] solution(int[] a, int n) {
            int[] f = new int[n];
            for(int i=0; i < n; i++) {
                f[i] = 1;
                for(int k =0; k < i; k++) {
                    if(a[k] < a[i])
                        f[i] = Math.max(f[i], f[k] + 1);
                }
            }
            int[] maxn = new int[n];
            maxn[0] = f[0];
            for(int i=1; i < n; i++)
                maxn[i] = Math.max(maxn[i-1], f[i]);
            return maxn;
        }
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            while(sc.hasNext()){
                int n = sc.nextInt();
                int[] a = new int[n];
                int[] b = new int[n];
                for(int i=0; i < n; i++) a[i] = sc.nextInt();
                int[] len1 = solution(a, n);
                for(int i=n-1; i >= 0; i--) b[i] = a[n-i-1];
                int[] len2 = solution(b, n);
                //System.out.println(Arrays.toString(len1));
                int res = 0;
                for(int i=0; i < n; i++) {
                    int t = len1[i];
                    t += len2[n-i-1];
                    t --;
                    res = Math.max(res, t);
                }
                System.out.println(n-res);
            }
        }
    }
    /*
    以a[i]为分界,找左边最长递增子序列和右边最长递增子序列和最大,为队列最大长度。
    f[i] 表示以i结尾,最长上升子序列
    f[i] = max(f[k] + 1) , k < i, a[i] > a[k]
    */
    
  • 相关阅读:
    Ubuntu 设置网卡固定IP
    gawk Notes(2)
    再读simpledb 之 存储的实现
    [zZ]HDFSRAID使用Erasure Code来实现HDFS的数据冗余
    初识gawk, gawk Notes(1)
    gawk notes(3)
    Shell Notes(2)
    凶残的突击面试
    Google 图片下载工具
    Shell Notes(3)
  • 原文地址:https://www.cnblogs.com/lixyuan/p/13281148.html
Copyright © 2011-2022 走看看