2018今日头条内推笔试1
程序员文章站
2022-04-20 22:20:53
...
按照y坐标j降序排序,然后从第一个元素开始从后往前找,当x坐标变大时,这个点就是“最大”点,更新x值,继续往后找,直至全部遍历;
例如有5个点,横坐标分别为9,6,3,1,5
纵坐标分别为3,4,5,6,8
先按照y降序排序,
横坐标分别为5,1,3,6,9
纵坐标分别为8,6,5,4,3
然后取第一个x=5,那么(5,8)是一个“最大”点,继续往后找,6比5大,所以(6,4)也是一个“最大”点,更新x的值为6,继续往后找,9比6大,得到第三个“最大”点(9,3),遍历完成,按照顺序输出这3个“最大”点即可;
代码实现:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int n = in.nextInt();
List<Dian> list = new ArrayList<>();
for(int i=0;i<n;i++){
in.nextLine();
list.add(new Dian(in.nextInt(),in.nextInt()));
}
Collections.sort(list,(a,b)->(b.c-a.c));
int x = list.get(0).r-1;
for(Dian d : list){
if(d.r > x){
System.out.println(d.r+" "+d.c);
x = d.r;
}
}
}
}
}
class Dian{
int r;
int c;
public Dian(int r,int c){
this.r = r;
this.c = c;
}
}
算法时间复杂度为O(nlgn).