zoukankan      html  css  js  c++  java
  • 叠罗汉II

    叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。为了使叠成的罗汉更稳固,我们应该让上面的人比下面的人更轻一点。现在一个马戏团要表演这个节目,为了视觉效果,我们还要求下面的人的身高比上面的人高。请编写一个算法,计算最多能叠多少人,注意这里所有演员都同时出现。
    给定一个二维int的数组actors,每个元素有两个值,分别代表一个演员的身高和体重。同时给定演员总数n,请返回最多能叠的人数。保证总人数小于等于500。

    测试样例:

    [
    [1,2],
    [3,4],
    [5,6],
    [7,8]
    ],4

    返回:4

    解题

    高的人,重的人在下面

    矮的人,轻的人在上面

    按照升高升序排序后,找到体重的最长上升子序列就好了

    import java.util.*;
    
    public class Stack {
        public int getHeight(int[][] A, int n) {
            // write code here
    		 Arrays.sort(A, new myComparator());
            int[] dp = new int[n];
            int height = -1;
            dp[0] = 1;
            for(int i=1;i<n;i++){
                int h = 0 ;
                for(int j=0;j<i;j++){
                    if(A[i][1] > A[j][1]){
                        h = Math.max(h,dp[j]);
                    }
                }
                dp[i] = h + 1;
                height = Math.max(dp[i],height);
            }
            return height;
        }
        class myComparator implements Comparator<int[]>{
            public int compare(int[] a, int[] b) {
                    if(a[0] < b[0])
                        return -1;
                    else if(a[0] > b[0])
                        return 1;
                    else {
                        if(a[1] < b[1])
                            return -1;
                        else if(a[1] > b[1])
                            return 1;
                        else
                            return 0;
                    }
                }
        }
    }
    

    注意理解上面如何实现的排序

  • 相关阅读:
    高级树,AVL树和红黑树
    递归分治和动态规划
    树的便利
    undefined: balancer.PickOptions 报错
    微服务常用中间件
    golang中间件的实现
    OpenTracing与Jaeger
    selenium中driver.close()与driver.quit()的区别
    20201016_苹果开发者证书申请流程
    20201016_苹果开发者证书申请
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5816166.html
Copyright © 2011-2022 走看看