目录

AtCoder C 213

AtCoder

tyz020 | 08 Aug 2021

题目大意

题目给了一个二维数组,以及一系列的坐标,要求把数组内不存在有坐标的行、列清理删除,最终返回已清理完毕后的坐标

解题思路

将一系列坐标以对象形式存储至数组内

先按行数排序,重新列举每个坐标的行数

再按列数排序,重新列举每个坐标的列数

最后把数组按输入顺序排序并输出

复杂度

存储至数组 \(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;
  }
}

评论区