今日头条,编程题一,数组保存
今晚头条的编程: 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)); } } } }
#字节跳动#