Leetcode - Line Reflection

My code:

public class Solution {
    public boolean isReflected(int[][] points) {
        if (points == null || points.length == 0 || points[0].length != 2) {
            return true;
        }
        
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        HashSet set = new HashSet();
        for (int i = 0; i < points.length; i++) {
            max = Math.max(max, points[i][0]);
            min = Math.min(min, points[i][0]);
            String s = points[i][0] + "," + points[i][1];
            set.add(s);
        }
        
        int sum = max + min;
        for (int i = 0; i < points.length; i++) {
            String s = (sum - points[i][0]) + "," + points[i][1];
            if (!set.contains(s)) {
                return false;
            }
        }
        return true;
    }
}

reference:
https://discuss.leetcode.com/topic/48172/simple-java-hashset-solution

自己尝试着做,但是并没做出来。
我搞了个list,还有一个类 Point
然后把所有的点变成point插入list中,然后排序。
然后再用双指针前后比较。以为就是这么简单。发现还有最后一道关卡,会有重复的点。

所以得用 hashset
我想,得用 hashset去重复,然后再遍历插进list,然后再排序,再双指针,太麻烦了。于是就没继续做下去,直接看答案了。
不得不说,答案真的很简洁。
就是对点进行下简单的编码,这比 Point 类好。因为 HashSet 可以去重 String, 但不能去重 Point, 除非Point 自己实现了 Comparable interface

之后也不用排序了。拿到sum
然后取出一个点, (sum - p.x, p.y), 一定是存在于hashset 中的。
一切都是那么的简洁,直接。

Anyway, Good luck, Richardo! -- 09/22/2016

你可能感兴趣的:(Leetcode - Line Reflection)