中级农民
- 积分
- 155
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-4-17
- 最后登录
- 1970-1-1
|
写了下merge logs的题,这题确实有些麻烦。。欢迎指教
- public class MergeIntervalLogs {
- class Point {
- int num;
- int flag;
- public Point(int num, int flag) {
- this.num = num;
- this.flag = flag;
- }
- }
-
- class Record {
- Point point;
- int count;
- public Record(Point p, int c) {
- point = p;
- count = c;
- }
- }
- public List<int[]> mergeLogs(int[][] A, int[][] B) {
-
- List<Point> points = new ArrayList<Point>();
- for (int[] arr : A) {
- points.add(new Point(arr[0], 1));
- points.add(new Point(arr[1], 0));
- }
- for (int[] arr : B) {
- points.add(new Point(arr[0], 1));
- points.add(new Point(arr[1], 0));
- }
- Collections.sort(points, new Comparator<Point>() {
- public int compare(Point p1, Point p2) {
- if(p1.num == p2.num) {
- return p1.flag - p2.flag;
- }
- return p1.num - p2.num;
- }
- });
- int count = 0;
- List<Record> records = new ArrayList<Record>();
- for (Point p : points) {
- if (p.flag == 1) {
- count++;
- } else {
- count--;
- }
- records.add(new Record(p, count));
- }
-
- return getResult(records);
- }
- private List<int[]> getResult(List<Record> records) {
- List<int[]> res = new ArrayList<int[]>();
- int start = records.get(0).point.num;
- int val = records.get(0).count;
- for (int i = 1; i < records.size(); i++) {
- res.add(new int[]{start, records.get(i).point.num, 2 - val});
- start = records.get(i).point.num;
- val = records.get(i).count;
- }
- return res;
- }
-
- public static void main(String[] args) {
- int[][] A = {{1,4},{6,8}};
- int[][] B = {{2,5}};
- MergeIntervalLogs ml = new MergeIntervalLogs();
- List<int[]> res = ml.mergeLogs(A, B);
- for (int[] arr : res) {
- System.out.println(arr[0] + " " + arr[1] + " " + arr[2]);
- }
- }
- }
复制代码 |
|