LeetCode 356. 直线镜像
文章目录
- 1. 题目
- 2. 解题
1. 题目
在一个二维平面空间中,给你 n 个点的坐标。
问,是否能找出一条平行于 y 轴的直线,让这些点关于这条直线成镜像排布?
示例 1:
输入: [[1,1],[-1,1]]
输出: true示例 2:
输入: [[1,1],[-1,-1]]
输出: false
拓展:
你能找到比 O(n^2) 更优的解法吗?
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/line-reflection
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 按x排序,相同,则按y排序,去重
- 前半部分在x基础上按y降序,方便双指针比较
- 还要考虑都在一条直线上也是可以的
class Solution {public:bool isReflected(vector<vector<int>>& points) {sort(points.begin(), points.end(),[&](auto a, auto b){if(a[0] == b[0])return a[1] < b[1];//y大的靠后return a[0] < b[0];//按x坐标排序});if(points[0][0] == points[points.size() - 1][0])//x都相等,在一条线上,truereturn true;points.erase(unique(points.begin(), points.end()), points.end());//有重复的点int half = points.size()/2;sort(points.begin(), points.begin()+half, [&](auto a, auto b){if(a[0] == b[0])return a[1] > b[1];//前半部分y大的靠前return a[0] < b[0];//按x坐标排序});int l = 0, r = points.size()-1;if(points[l][1] != points[r][1]) return false;int xmid = points[l++][0] + points[r--][0];//中心的两倍while(l < r){if(points[l][0] != points[r][0] && (points[l][1] != points[r][1] || points[l][0] + points[r][0] != xmid)) return false;l++,r--;}return points[l][0] + points[r][0] == xmid;}
};// [[1,1],[0,1],[-1,1],[0,0]]
// [[1,2],[2,2],[1,4],[2,4]]
// [[-16,1],[16,1],[16,1]]
// [[1,1],[-1,1]]
// [[0,0],[0,-1]]
// [[0,0],[1,0],[3,0]]
参考大力王的简洁写法:
class Solution {public:bool isReflected(vector<vector<int>>& points) {int left = INT_MAX, right = INT_MIN;for(auto& p : points){left = min(p[0], left);right = max(p[0], right);}int xmid = left + right;set<vector<int>> s(points.begin(), points.end());for(auto& p : points)if (s.find({xmid-p[0], p[1]}) == s.end())return false;return true;}
};
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 356. 直线镜像相关推荐
- leetcode:356. 直线对称
题目解析 leetcode:356. 直线对称 题目描述 在一个二维平面空间中,给你 n 个点的坐标. 问,是否能找出一条平行于 y 轴的直线,让这些点关于这条直线成镜像排布? class Solut ...
- LeetCode 149 直线上最多的点数
一.题目介绍 给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上. 示例 1: 输入: [[1,1],[2,2],[3,3]] 输出: 3 解释: ^ | | o | ...
- leetcode 149. 直线上最多的点数
题目 给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点.求最多有多少个点在同一条直线上. 示例 1: 输入:points = [[1,1],[ ...
- 如何学好C语言--你的学渣朋友告诉你
光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...
- 【Leetcode】精选算法top200道(二)
二.中等 339.嵌套列表权重和 给定一个嵌套的整数列表 nestedList ,每个元素要么是整数,要么是列表.同时,列表中元素同样也可以是整数或者是另一个列表. 整数的 深度 是其在列表内部的嵌套 ...
- leetcode刷题目录总结
题目 题目 技巧 相似的题目 其他 1. 无序数组中找出目标为target的两个数 先定义下一个数,然后找两位的数是否存在 高频, 大厂刷题班, 第27节 2.逆序链表两数相加 链表.各位加法 高频, ...
- LeetCode MySQL解题目录
已完成的 LeetCode MySQL 数据库题目.点击查看我的 LeetCode 算法解题目录. 已解决 123/123 - 简单 54 中等 51 困难 18 前置入门学习 MySQL 基本查询. ...
- 结构建模设计——Solidworks软件之草图镜像阵列功能总结及进阶绘制小挖土机草图实战
[系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <从0到1学习嵌入式Linux开发> <A ...
- LeetCode1-620题汇总,希望对你有点帮助!
时间很快,公众号发布的LeetCode题目,已经达到620道题了.今天把发布的1-620篇LeetCode文章整理一下,平时文章都放在比较末尾,阅读量都不高,相信很多人都没看过,如果对于算法感兴趣的, ...
最新文章
- java二叉树镜像_给定一个二叉树,检查它是否是镜像对称的。
- Topcoder SRM570 900 CurvyonRails
- 《iOS 全埋点技术白皮书》重磅推出
- 谈谈你对php的收获和不足,我的收获与不足
- [html] 你是如何理解html与css分离的?
- Win7_刻录DVD
- 学习vim的正确姿势!
- 完美解决Python与anaconda之间的冲突问题,你值得拥有
- Android 在popupWindow上用autoCompleteTextView报错(Android 6.0报错,8.0没有问题)
- LG显示将在坡州工厂为iPhone 14 Pro Max生产120Hz刷新率屏幕
- 2011年度最佳开源软件:Bossie奖结果公布
- 简述台式计算机组装的基本步骤,《计算机组装与维修》期中考试试卷答案
- 使用alarm API实现灵活的延时操作
- Easy Code,IntelliJ IDEA中代码一键生成
- [Redis]Redis的数据类型
- ipad air1 12.5.5 checkra1n 越狱+绕过ID
- luma3ds7.1按start键开机无法启动payload解决
- ORACLE 中通过证件号码获取性别
- swagger常用注解汇总
- LED透明屏为什么能透明?实现原理
热门文章
- python 重载的实现(single-dispatch generic function)
- virtual析构函数的作用?
- iconsvg image怎么变为path_昆凌是怎么收服天王周杰伦的?这几招太高明了
- 嵌入式Linux系统的构成和启动总结
- wangeditor html编辑,Vue整合wangEditor富文本编辑器
- iOS 打包.framework(包括第三方、图片、xib、plist文件)详细步骤及需要注意的地方...
- STM32的PA15、PB3、 PB4管脚作普通管脚的解决办法
- python__实参前加*和**的(拆包)功能
- UVA - 11246 - K-Multiple Free set(容斥原理)
- C#快速导入海量XML数据至SQL Server数据库