给出一个set,问能不能找到四个点组成平行于坐标轴的矩形,如果能输出YES,否则输出NO。

注意事项
set的点数小于2000,坐标范围在[-10000000,10000000]。

样例
给出 set = [[0,0],[0,1],[1,1],[1,0]],返回 YES。

解释:
set中的四个点能组成平行于坐标轴的矩形。
给出 set = [[0,0],[0,1],[1,1],[2,0]],返回 NO。

解释:
set中的四个点不能组成平行于坐标轴的矩形。

思路:和在点集中找到一条直线所能经过的最多的点有异曲同工之妙,可以先把所有点放到一个unordered_set的字典里面用于查找(可以自己设计hash函数,我把点转换成了字符串,算是一个取巧的写法,不过牺牲了一定的速度),然后任选两点,可以确定这两点如果组成矩阵则另两点的坐标(A.x,B.y)和(B.x,A.y)也就能够得到,检查字典是否存在就行了。
时间复杂度O(n^2),空间复杂度O(n)

 1 // class Point {
 2 // public:
 3 //     int x, y;
 4 //     Point(int x, int y) {
 5 //         this->x = x;
 6 //         this->y = y;
 7 //     }
 8 // };
 9
10
11 class Solution {
12 public:
13     /**
14      * @param pointSet: The point set
15      * @return: The answer
16      */
17     string rectangle(vector<Point> &pointSet) {
18         // Write your code here
19         int size = pointSet.size();
20         string yes = "YES";
21         string no = "NO";
22         if(size<4) return no;
23         unordered_set<string> dict;//字典
24         for(auto p:pointSet){
25             string temp = point2string(p.x,p.y);
26             dict.insert(temp);
27         }
28         for(int i=0;i<size;++i){
29             for(int j=0;j<size;++j){
30                 if(i==j || i<j) continue;//去重处理
31                 if(pointSet[i].x == pointSet[j].x || pointSet[i].y == pointSet[j].y) continue;//若两个点x或者y相同,则这种坐标查找会出问题,跳过
32                 if(dict.count(point2string(pointSet[i].x,pointSet[j].y))&&dict.count(point2string(pointSet[j].x,pointSet[i].y))) return yes;//判断另外两个点是否在dict里
33             }
34         }
35         return no;
36     }
37
38     string point2string(int x,int y){ //点坐标转换成string,unordered_set对于string有默认hash函数
39         string temp = "";
40         temp += to_string(x);
41         temp += "#";
42         temp += to_string(y);
43         return temp;
44     }
45 };

转载于:https://www.cnblogs.com/J1ac/p/8830366.html

LintCode 820. 矩形相关推荐

  1. 【精】LintCode领扣算法问题答案:626. 矩形重叠

    626. 矩形重叠 给定两个矩形,判断这两个矩形是否有重叠. l1代表第一个矩形的左上角 r1代表第一个矩形的右下角 l2代表第二个矩形的左上角 r2代表第二个矩形的右下角 保证:l1 != r1 并 ...

  2. LintCode 600. 包裹黑色像素点的最小矩形(BFS)

    1. 题目 一个由二进制矩阵表示的图,0 表示白色像素点,1 表示黑色像素点. 黑色像素点是联通的,即只有一块黑色区域. 像素是水平和竖直连接的,给一个黑色像素点的坐标 (x, y) ,返回囊括所有黑 ...

  3. LintCode解题目录

    看见 LintCode 的代码能力测试CAT(Coding Ability Test)挺好,有倒计时,挺有面试紧迫感.做个记录. 另有本人 LeetCode解题目录.<程序员面试金典>解题 ...

  4. 荣耀30S首发新一代神U麒麟820 5G:GeekBench得分媲美骁龙855

    [TechWeb]根据官方此前公布的消息,荣耀将于3月30日在线上正式推出全新的荣耀30S旗舰新机,荣耀业务部副总裁熊军民透露,荣耀30S将是改变5G手机市场竞争格局的一款产品.随着发布时间的日益临近 ...

  5. 疑似荣耀30S将于今日正式官宣:首发搭载全新麒麟820芯片

    [TechWeb]虽然疫情对各行各业都产生了非常大的影响,但似乎并没有太多影响到手机圈新机的推出,从目前亮相的旗舰新机来看,今年的杰作丝毫不逊于往年.随着第一季度即将结束,消费者的目光也逐渐集中在了仅 ...

  6. 判断一个点是否在矩形内部_矩形、圆形泄水管规格型号优势

    矩形泄水管规格齐全铸铁泄水管是由高密度钢铁添加其它助剂而形成的外型钢铁管材,针对不同的排水要求,管孔的大小可为10mm×1mm-30mm×3mm,并且可以在360度.270度.180度.90度等范围内 ...

  7. 6 最小覆盖矩形(Smallest Rectangle Enclosing Black Pixels)

    文章目录 1 题目 2 描述 3 思路 3.1 图解 3.2 时间复杂度 3.3 空间复杂度 4 源码 1 题目   最小覆盖矩形(Smallest Rectangle Enclosing Black ...

  8. LeetCode 柱状图中最大的矩形

    给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [ ...

  9. lintcode 动态规划问题

    前言 第二周我们计划刷动态规划的题目,由于题目较多.我们选取出现频率最高的十道题目. 此次参与刷题的有五人(嘟嘟.琼琼.东东.大智.博主) 正题 94.二叉树中的最大路径和 1.dp[father] ...

最新文章

  1. 基于自监督网络的手部静脉无损三维测量
  2. 典型问题分析(十五)
  3. Libra教程之:运行自定义move modules
  4. [react-router] React-Router 4中<Router>组件有几种类型?
  5. T-SQL逻辑处理之表运算符
  6. 人工智能必备数学知识· 学习笔记 ·002【马尓可夫链,马尓可夫链奖励过程,马尔可夫决策过程】
  7. c++ 写文件怎么让0x00不被识别成结束符_使用docker-copyedit工具删除镜像中不需要的环境变量和VOLUME...
  8. elasticsearch使用3:配置同义词词库、ik分词器扩展字典和扩展停止词字典
  9. 计算机小高考成绩,2018江苏小高考成绩出来了!昆山*亮眼的学校是…
  10. 生信分析学习笔记:(2)GO KEGG分析
  11. 2020年最好用的离线下载网盘,不限速度和空间
  12. mysql工作时间获取_mysql获取当前时间,及其相关操作
  13. 2017百度秋招真题笔试之十字架
  14. 怀孕之前营养要充分预备
  15. VMware Horizon 8 2209 - 虚拟桌面基础架构 (VDI) 和应用软件
  16. 高等代数 二次型与矩阵的合同(第6章)1 二次型,标准形,规范形
  17. 云服务器上传文件怎么这么慢,百度云上传速度慢怎么办?教你如何加快百度云上传速度...
  18. 尘埃落定性描写细节摘要_解释“细节”和“摘要”元素
  19. 华硕服务器系统都还原不了,windows10系统还原失败怎么办|windows10系统还原失败如何解决...
  20. CocosCreator特效系列之素描效果

热门文章

  1. 《恋上数据结构第1季》二叉树基础、真二叉树、满二叉树、完全二叉树、二叉树的遍历(重点)
  2. 软技能-代码之外的生存指南-读书笔记(持续更新中)
  3. 学习笔记_vnpy实战培训day04_作业
  4. 不看可惜!无需代码,小白都会的可视化大屏,领导不重用你都难
  5. linux php整合mysql_linux下Apache、php3、MySQL的整合
  6. c盘怎么清理到最干净_系统垃圾太多,怎么一键彻底清理干净
  7. php中怎样创建数据库服务器,实例讲解通过​PHP创建数据库
  8. python捕捉线程错误_python 主线程捕获子线程异常
  9. hnu暑期实训之487-3279 字符串处理
  10. 第8-9讲 视觉里程计2