报告错误
如果你发现该网页中存在错误/显示异常,可以从以下两种方式向我们报告错误,我们会尽快修复:
- 使用 CS Club 网站错误 为主题,附上错误截图或描述及网址后发送邮件到 286988023@qq.com
- 在我们的网站代码仓库中创建一个 issue 并在 issue 中描述问题 点击链接前往Github仓库
题目大意
题目给了一个二维数组,以及一系列的坐标,要求把数组内不存在有坐标的行、列清理删除,最终返回已清理完毕后的坐标
解题思路
将一系列坐标以对象形式存储至数组内
先按行数排序,重新列举每个坐标的行数
再按列数排序,重新列举每个坐标的列数
最后把数组按输入顺序排序并输出
复杂度
存储至数组 \(O(N)\) 数组排序 \(O(N\log{N})\) 最终复杂度为 \(O(N\log{N})\)
提交代码
import java.util.*;
import java.io.*;
public class Main{
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static String[] input;
static Point[] points;
public static void main(String[] args) throws IOException {
parseInput();
int current, last;
PointComparatorByRow comparatorByRow = new PointComparatorByRow();
PointComparatorByCol comparatorByCol = new PointComparatorByCol();
Arrays.sort(points, comparatorByRow);
current = 0;
last = 0;
for(int i = 0; i < points.length; i++) {
if(points[i].row == last) points[i].row = current;
else {
last = points[i].row;
current++;
points[i].row = current;
}
}
Arrays.sort(points, comparatorByCol);
current = 0;
last = 0;
for(int i = 0; i < points.length; i++) {
if(points[i].col == last) points[i].col = current;
else {
last = points[i].col;
current++;
points[i].col = current;
}
}
Arrays.sort(points);
for(int i = 0; i < points.length; i++) System.out.println(points[i].row + " " + points[i].col);
}
public static void parseInput() throws IOException {
input = br.readLine().split(" ");
points = new Point[Integer.parseInt(input[2])];
for(int i = 0; i < points.length; i++) {
String[] temp = br.readLine().split(" ");
points[i] = new Point(Integer.parseInt(temp[0]), Integer.parseInt(temp[1]), i);
}
}
}
class Point implements Comparable<Point> {
int row, col, index;
public Point(int row, int col, int index) {
this.row = row;
this.col = col;
this.index = index;
}
public int compareTo(Point other) {
return this.index - other.index;
}
}
class PointComparatorByRow implements Comparator<Point> {
@Override
public int compare(Point p1, Point p2) {
return p1.row - p2.row;
}
}
class PointComparatorByCol implements Comparator<Point>{
@Override
public int compare(Point p1, Point p2) {
return p1.col - p2.col;
}
}