首页 > 代码库 > Leetcode: Line Reflection
Leetcode: Line Reflection
Given n points on a 2D plane, find if there is such a line parallel to y-axis that reflect the given points. Example 1: Given points = [[1,1],[-1,1]], return true. Example 2: Given points = [[1,1],[-1,-1]], return false. Follow up: Could you do better than O(n2)? Hint: Find the smallest and largest x-value for all points. If there is a line then it should be at y = (minX + maxX) / 2. For each point, make sure that it has a reflected point in the opposite side.
本题精妙之处在于:1. 如何最快找到possible的line的x axis(我最开始想到要用quickselect find median的方法,结果别人有min max方法)
2. 如何最方便确定一个点关于该line的reflection是否存在,由于既有x又有y,不太好处理,别人有个聪明的办法把x跟y组合成string,然后用hashset
学到了:以后处理多个value共同作用的时候,可以考虑wrapper class(但是不好用set), 更应该想一想能不能直接把它们组合成string(直接又好利用set来find)
1 public class Solution { 2 public boolean isReflected(int[][] points) { 3 int minX = Integer.MAX_VALUE, maxX = Integer.MIN_VALUE; 4 HashSet<String> set = new HashSet<>(); 5 for (int[] point : points) { 6 minX = Math.min(minX, point[0]); 7 maxX = Math.max(maxX, point[0]); 8 set.add(point[0] + "a" + point[1]); 9 } 10 double sum = minX + maxX; 11 for (int[] point : points) { 12 if (!set.contains((int)(sum-point[0]) + "a" + point[1])) 13 return false; 14 } 15 return true; 16 } 17 }
Leetcode: Line Reflection
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。