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阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用DispatcherTimer计时器

《银光志--Silverlight 3.0开发详解与最佳实践》第3章XAML与Silverlight编程内功&#xff0c;通过本章的学习&#xff0c;相信你会对Silverlight编程模型、XAML、事件处理&#xff0c;以及LINQ查询语言有了一个比较全面的了解&#xff0c;在本章的示例中应用的都是一些基本的XA…

静物摄影用光技巧_室内人像摄影想要拍好,这3种用光技巧你了解吗?

选择靠近窗户的位置在室内可以首先考虑在靠近窗户的位置进行拍摄&#xff0c;因为窗户边上尤其是朝北的窗户会有非常柔和的散射光&#xff0c;当投射进窗户的是直射光线时&#xff0c;摄影者还可以拉上一层很薄的窗帘来缓解一下光线的强度&#xff0c;在靠近窗户的位置&#xf…

LeetCode 660. 移除 9(9进制)

文章目录1. 题目2. 解题1. 题目 从 1 开始&#xff0c;移除所有包含数字 9 的所有整数&#xff0c;例如 9&#xff0c;19&#xff0c;29&#xff0c;…… 这样就获得了一个新的整数数列&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&…

postman怎么导出测试用例_利用Charles抓包巧转接口自动化测试用例

在前面的文章中&#xff0c;也有介绍类似的工具的。例如&#xff1a;一键将接口请求转为测试用例介绍了开源的mitmproxy录制转化为接口测试用例&#xff0c;postman接口用例转化为python自动化测试用例 文章记录了如何把postman的测试用例转化为python的接口自动化的测试用例&a…

LeetCode 1236. 网络爬虫(BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 给定一个链接 startUrl 和一个接口 HtmlParser &#xff0c;请你实现一个网络爬虫&#xff0c;以实现爬取同 startUrl 拥有相同 域名标签 的全部链接。该爬虫得到的全部链接可以 任何顺序 返回结果。 你的网络爬虫应当按照如下模…

启动不起来_国产开源工具:U盘启动工具Ventoy v1.0.29发布——墨涩网

Ventoy是一个制作可启动U盘的开源工具。有了Ventoy你就无需反复地格式化U盘&#xff0c;你只需要把ISO文件拷贝到U盘里面就可以启动了&#xff0c;无需其他操作。你可以一次性拷贝很多个不同类型的ISO文件&#xff0c;在启动时Ventoy会显示一个菜单来选择。 无差异支持Legacy B…

众多Android 开源项目再次推荐,学习不可错过

FBReaderJ FBReaderJ用于Android平台的电子书阅读器&#xff0c;它支持多种电子书籍格式包括&#xff1a;oeb、ePub和fb2。此外还支持直接读取zip、tar和gzip等压缩文档。项目地址&#xff1a;http://www.fbreader.org/FBReaderJ/Angle Angle是一款专为Android平台设计的&#…

LeetCode 1231. 分享巧克力(极小极大化 二分查找)

文章目录1. 题目2. 解题1. 题目 你有一大块巧克力&#xff0c;它由一些甜度不完全相同的小块组成。我们用数组 sweetness 来表示每一小块的甜度。 你打算和 K 名朋友一起分享这块巧克力&#xff0c;所以你需要将切割 K 次才能得到 K1 块&#xff0c;每一块都由一些 连续 的小…

筛选末位数字为1或5_看看广州示范性高中排行榜,怎么填报志愿?如何运用末位考生分数...

人们评价一所高中学校的层次通常会用两个指标&#xff1a;高考升学率和录取分数线&#xff0c;升学率又多以高优率高低为排序标准。在志愿填报期间&#xff0c;不少家长总希望我对学校进行比较。我试以三个维度对广州的70所示范性高中学校(校区)进行比较供大家参考。2016-2018近…

简明Python3教程 8.控制流

简介 迄今为止我们见到的所有程序总是含有一连串语句并且python忠实的顺序执行它们。 那么如何改变它们的执行顺序呢&#xff1f;例如你希望程序根据不同情况作出不同反应&#xff0c;按照当前时间分别 打印出’Good Morning’或’Good Evening’? 也许你已经猜到了&#xff0…

LeetCode 1166. 设计文件系统(哈希map)

文章目录1. 题目2. 解题1. 题目 你需要设计一个能提供下面两个函数的文件系统&#xff1a; create(path, value): 创建一个新的路径&#xff0c;并尽可能将值 value 与路径 path 关联&#xff0c;然后返回 True。 如果路径已经存在或者路径的父路径不存在&#xff0c;则返回 …

LeetCode 1087. 字母切换(回溯)

文章目录1. 题目2. 解题1. 题目 我们用一个特殊的字符串 S 来表示一份单词列表&#xff0c;之所以能展开成为一个列表&#xff0c;是因为这个字符串 S 中存在一个叫做「选项」的概念&#xff1a; 单词中的每个字母可能只有一个选项或存在多个备选项。 如果只有一个选项&…

遍历删除_面试难题:List 如何一边遍历,一边删除?

1. 新手常犯的错误可能很多新手(包括当年的我&#xff0c;哈哈)第一时间想到的写法是下面这样的&#xff1a;public static void main(String[] args) { List platformList new ArrayList<>(); platformList.add("博客园"); platformList.add("…

LeetCode 1060. 有序数组中的缺失元素(二分查找)

文章目录1. 题目2. 解题2.1 一次遍历2.2 二分查找1. 题目 给出一个有序数组 A&#xff0c;数组中的每个数字都是 独一无二的&#xff0c;找出从数组最左边开始的第 K 个缺失数字。 示例 1&#xff1a; 输入&#xff1a;A [4,7,9,10], K 1 输出&#xff1a;5 解释&#xff1…

iOS代码工具箱

判断日期是不是同一天&#xff0c;不要求是小时、分钟要一样。from&#xff1a;http://www.oliverfoggin.com/nsdate-isequaltodatetounitgranularity/?utm_sourceiOSDevWeekly&utm_campaigniOS_Dev_Weekly_Issue_115&utm_mediumemail #import <Foundation/Foundat…

LeetCode 536. 从字符串生成二叉树(递归)

文章目录1. 题目2. 解题1. 题目 你需要从一个包括括号和整数的字符串构建一棵二叉树。 输入的字符串代表一棵二叉树。 它包括整数和随后的0&#xff0c;1或2对括号。 整数代表根的值&#xff0c;一对括号内表示同样结构的子树。 若存在左子结点&#xff0c;则从左子结点开始…

LeetCode 1062. 最长重复子串(二分查找)

文章目录1. 题目2. 解题1. 题目 给定字符串 S&#xff0c;找出最长重复子串的长度。如果不存在重复子串就返回 0。 示例 1&#xff1a; 输入&#xff1a;"abcd" 输出&#xff1a;0 解释&#xff1a;没有重复子串。示例 2&#xff1a; 输入&#xff1a;"abbaba…

LeetCode MySQL 1174. 即时食物配送 II

文章目录1. 题目2. 解题1. 题目 配送表: Delivery -------------------------------------- | Column Name | Type | -------------------------------------- | delivery_id | int | | customer_id | int | | o…

存储过程语法

View Code 存储过程如同一门程序设计语言&#xff0c;同样包含了数据类型、流程控制、输入和输出和它自己的函数库。--------------------基本语法--------------------一.创建存储过程 create procedure sp_name() begin ......... end二.调用存储过程 1.基本语法&#xff1a…

LeetCode MySQL 1158. 市场分析 I

文章目录1. 题目2. 解题1. 题目 Table: Users ------------------------- | Column Name | Type | ------------------------- | user_id | int | | join_date | date | | favorite_brand | varchar | ------------------------- 此表主键是 user_i…