今日头条,编程题一,数组保存
今晚头条的编程:
P为给定的一个二维平面,定义P中的 x 点,如果 x 点满足P中任意点都不在 x 的右上方区域内(横坐标都大于 x ),则称 x “最大”,求出所有
最大的点集合。
输入:N(点集的个数),输出(“最大”的集合)
测试用例:
5
1 2
5 3
4 6
7 5
9 0
输出:
4 6
7 5
9 0
问:我下面的代码本地ac,提交20%,报:时间超出。问:保存一组坐标的最好的方法是什么,我用list确实耗时了。
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
// 输入n组数
int n = sc.nextInt();
int[] x = new int[n];// 横坐标
int[] y = new int[n];// 纵坐标
// 索引相同,代表是一组坐标
for (int i = 0; i < n; i++) {
x[i] = sc.nextInt();
y[i] = sc.nextInt();
}
// list存放一组坐标list.add(x);list.add(y)
ArrayList<Integer> list = new ArrayList<Integer>();
// list1存放多组坐标list1.add(list)
ArrayList<ArrayList<Integer>> list1 = new ArrayList<ArrayList<Integer>>();
// 筛选符合要去的一组坐标,放入list,将改组坐标放入list1
for (int i = 0; i < n; i++) {
int flag = 0;
for (int j = 0; j < n; j++) {
if (x[i] > x[j] || y[i] > y[j] && i != j) {
flag++;
}
}
if (flag == n - 1) {
list.add(x[i]);
list.add(y[i]);
list1.add(list);
list = new ArrayList<Integer>();
}
}
// 遍历list1,取出筛选的坐标
for (int i = 0; i < list1.size(); i++) {
System.out.println(list1.get(i).get(0) + " " + list1.get(i).get(1));
}
}
}
}
#字节跳动#


