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;
                    }
                }
        }
    }
    

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

  • 相关阅读:
    IOS系统设置页面跳转
    android常用自动化测试框架
    Gradle学习总结
    软件开发版本管理阶段描述
    Swift学习笔记(10):类和结构体
    Swift学习笔记(9):枚举
    Swift学习笔记(8):闭包
    Swift学习笔记(7):函数
    Swift学习笔记(6):控制流
    JSON序列化器/解析器
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5816166.html
Copyright © 2011-2022 走看看