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
自己嘗試著做,但是并沒做出來。
我搞了個(gè)list,還有一個(gè)類 Point
然后把所有的點(diǎn)變成point插入list中,然后排序。
然后再用雙指針前后比較。以為就是這么簡單。發(fā)現(xiàn)還有最后一道關(guān)卡,會有重復(fù)的點(diǎn)。
所以得用 hashset
我想,得用 hashset去重復(fù),然后再遍歷插進(jìn)list,然后再排序,再雙指針,太麻煩了。于是就沒繼續(xù)做下去,直接看答案了。
不得不說,答案真的很簡潔。
就是對點(diǎn)進(jìn)行下簡單的編碼,這比 Point 類好。因?yàn)?HashSet 可以去重 String, 但不能去重 Point, 除非Point 自己實(shí)現(xiàn)了 Comparable interface
之后也不用排序了。拿到sum
然后取出一個(gè)點(diǎn), (sum - p.x, p.y), 一定是存在于hashset 中的。
一切都是那么的簡潔,直接。
Anyway, Good luck, Richardo! -- 09/22/2016