首页 > 代码库 > Line Reflection -- LeetCode
Line Reflection -- LeetCode
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)?
思路:假设如果存在这样的一条对称轴,那么对于一对对称点,它们的X坐标之和应该是个定值。
我们找到所有点中X坐标的最小值和最大值,两者之和就是这个定值。
然后将所有点的坐标记录在set中,然后判断每个点的对称点是否在set中。
时间复杂度O(N)。
1 class Solution { 2 public: 3 bool isReflected(vector<pair<int, int>>& points) { 4 if (points.size() == 0) return true; 5 unordered_set<string> p; 6 int minX = INT_MAX, maxX = INT_MIN; 7 for (int i = 0; i < points.size(); i++) { 8 int x = points[i].first, y = points[i].second; 9 minX = std::min(minX, x);10 maxX = std::max(maxX, x);11 string code = std::to_string(x) + "|" + std::to_string(y);12 p.insert(code);13 }14 int sum = minX + maxX;15 for (int i = 0; i < points.size(); i++) {16 int x = sum - points[i].first, y = points[i].second;17 string code = std::to_string(x) + "|" + std::to_string(y);18 if (p.count(code) == 0) return false;19 }20 return true;21 }22 };
Line Reflection -- LeetCode
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。