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<String> set = new HashSet<String>();
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