Java数组排序中Comparator接口实现自定义排序

1、为节点排序。节点由3个字段组成,包括num ,weight ,height 。先按照weight升序排序,再按照height降序排序。

2、使用Comparator接口规则:编写多个排序方式类实现Comparator接口,并重写新Comparator接口中的compare()方法。升序是前者减去后者,降序是后者减去前者。

3、代码测试:同时也是牛客网中某题。

题目描述:

搜狐员工小王最近利用假期在外地旅游,在某个小镇碰到一个马戏团表演,精彩的表演结束后发现团长正和大伙在帐篷前激烈讨论,小王打听了下了解到, 马戏团正打算出一个新节目“最高罗汉塔”,即马戏团员叠罗汉表演。考虑到安全因素,要求叠罗汉过程中,站在某个人肩上的人应该既比自己矮又比自己瘦,或相等。 团长想要本次节目中的罗汉塔叠的最高,由于人数众多,正在头疼如何安排人员的问题。小王觉得这个问题很简单,于是统计了参与最高罗汉塔表演的所有团员的身高体重,并且很快找到叠最高罗汉塔的人员序列。 现在你手上也拿到了这样一份身高体重表,请找出可以叠出的最高罗汉塔的高度,这份表中马戏团员依次编号为1到N。

输入描述:

首先一个正整数N,表示人员个数。 
之后N行,每行三个数,分别对应马戏团员编号,体重和身高。

输出描述:

正整数m,表示罗汉塔的高度。
示例1

输入

6
1 65 100
2 75 80
3 80 100
4 60 95
5 82 101
6 81 70

输出

4

ac代码:dp部分参考了其他人思想,因为自己对dp一直不太熟悉,这次ide写了一遍,手写了好几遍去实现整个过程,总算是明白了。心累....

package schooloffer;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

/**
 * Created by caoxiaohong on 17/9/22.
 * 搜狐员工小王最近利用假期在外地旅游,在某个小镇碰到一个马戏团表演,精彩的表演结束后发现团长正和大伙在帐篷前激烈讨论,....
 * 动态规划,用到了最长上升子序列问题。首先按照体重从小到大排序,体重相同时,身高高的在上,然后求最长身高上升子序列的长度。
 * 要求:叠罗汉过程中,站在某个人肩上的人应该既比自己矮又比自己瘦,或相等。
 */
public class CircusTroup {
    static class People{
        int num;
        int weight;
        int height;
        public People(int num,int weight,int height){
            this.num=num;
            this.weight=weight;
            this.height=height;
        }
    }
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int N;
        while (scanner.hasNext()){
            N=scanner.nextInt();
            String inValid=scanner.nextLine();//无效
            People[]  peoples=new People[N];
            for(int i=0;i() {
                @Override
                public int compare(People o1, People o2) {
                    if(o1.weight==o2.weight){
                        return o2.height-o1.height;
                    }else{
                        return o1.weight-o2.weight;
                    }
                }
            });

            //第二处:注意地方 db部分开始
            //按身高求最大升序子序列,不是太会 
            int[] dp=new int[N];
            dp[0]=1;
            int level=0;
            for(int i=1;idp[i])
                        dp[i]=dp[j]+1;
                }
            }
            Arrays.sort(dp);
            level=dp[N-1];
            System.out.println(level);
        }
    }
}




你可能感兴趣的:(java,算法,nowcoder笔记)