程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)

1. 题目

给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]。
请找出一条直线,其通过的点的数目最多

设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S,你仅需返回[S[0],S[1]]作为答案
若有多条直线穿过了相同数量的点,则选择S[0]值较小的直线返回,S[0]相同则选择S[1]值较小的直线返回。

示例:
输入: [[0,0],[1,1],[1,0],[2,0]]
输出: [0,2]
解释: 所求直线穿过的3个点的编号为[0,2,3]提示:
2 <= len(Points) <= 300
len(Points[i]) = 2

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-line-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 暴力法,固定一个点,遍历所有剩余的
  • 采用嵌套的哈希map,第一层key存储斜率,第二层key存储截距,value为点的set集合(存储下标)
  • 斜率不存在,单独再开一个哈希表,key为与 x 轴的截距,value为点集合
  • 遍历所有集合找最多的
  • 对相等长度的点集合排序,取出题目要求的最小的下标的
  • 时间复杂度 O(n2)O(n^2)O(n2)
class Solution {
public:vector<int> bestLine(vector<vector<int>>& points) {int i, j, g, dx, dy, maxCount = 0, n = points.size();double k, b;unordered_map<double,unordered_map<double,set<int>>> m;//k,b,pointsunordered_map<double,set<int>> v;//x轴截距,斜率不存在时的集合vector<set<int>> ans;for(i = 0; i < n-1; ++i){for(j = i+1; j < n; ++j){dx = points[j][0]-points[i][0];dy = points[j][1]-points[i][1];if(dx==0)//斜率不存在{if(v[double(points[i][0])].empty())v[double(points[i][0])].insert(i);v[double(points[i][0])].insert(j);}else{k = double(dy)/dx;b = double(points[i][1])-points[i][0]*k;if(m[k][b].empty())m[k][b].insert(i);m[k][b].insert(j);}}}for(auto& mi : m){for(auto& mii : mi.second){if(mii.second.size() > maxCount){maxCount = mii.second.size();ans.clear();ans.push_back(mii.second);}else if(mii.second.size() == maxCount)ans.push_back(mii.second);}}for(auto& vi : v){if(vi.second.size() > maxCount){maxCount = vi.second.size();ans.clear();ans.push_back(vi.second);}else if(vi.second.size() == maxCount)ans.push_back(vi.second);}sort(ans.begin(),ans.end(),[&](auto a, auto b){auto it1 = a.begin(), it2 = b.begin();if(*it1 == *it2)return *(++it1) < *(++it2);return *it1 < *it2;});auto it = ans[0].begin();return {*it,*(++it)};}
};

660 ms 117.7 MB

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

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

相关文章

Visual C# 2008+SQL Server 2005 数据库与网络开发--13.1.1 菜单创建

创建菜单的方法大体可以包括两种&#xff0c;比较简单的方法是通过Visual Studio 2008提供的菜单设计工具来创建&#xff0c;这种方式创建的菜单比较固定。另外一种方式是通过后台程序创建&#xff0c;这种方式由于通过代码在窗体菜单加载的时候完成&#xff0c;所以编写过程相…

c语言数据类型_C语言基础数据类型

点击上方“C语言中文社区”&#xff0c;选择“设为星标★”技术干货第一时间送达&#xff01;基本类型基本类型就是我们在使用C语言时最基础的数据类型&#xff0c;包括整形(短整型&#xff0c;基本整型&#xff0c;长整型)、字符型、浮点型(单、双精度)以及枚举类型。构造类型…

为辨别offer含金量,我做了个时薪计算器

文 | 曹宾玲源 | 表外表里提到计算机专业&#xff0c;大部分人第一时间会联想到“万金油专业”“大厂”和“高薪”。但在2023届计算机毕业生眼里&#xff0c;这已经是过去式了。以前被嫌弃的华子&#xff0c;今年校招群里挤满了人&#xff0c;即使一直泡在“人才池”里&#xf…

程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)

1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上。 开始时&#xff0c;网格全白&#xff0c;蚂蚁面向右侧。 每行走一步&#xff0c;蚂蚁执行以下操作。 (1) 如果在白色方格上&#xff0c;则翻转方格的颜色&#xff0c;向右(顺时针)转 90 度&#xff0c;并向前移动一个…

在程序中设置infopath中的整型等域值时出错解决方法

最近一直和infopath表单打交道&#xff0c;碰到的问题也比较多&#xff0c;刚刚就碰到一个在程序中修改infopath表单中域的内容时出错的问题&#xff0c;写出来与大家共享一下&#xff0c;我想这个问题&#xff0c;可能玩infopath的话&#xff0c;迟早会碰上的吧。具体表现就是…

python中如何输入矩阵_python - 如何向矩阵中添加向量_numpy_酷徒编程知识库

首先&#xff0c;我们可以初始化一个用零填充所需形状的矩阵&#xff0c;然后将a复制到前13行。在任何情况下&#xff0c;我们都必须形成一个新的矩阵&#xff0c;因为我们无法摆弄现有的矩阵/向量&#xff0c;因为我们需要为额外的空行分配更多的内存。 你可以在下面找到例子演…

聚类方法(Clustering)

文章目录1. 聚类基本概念1.1 相似度、距离1.2 类、簇1.3 类之间的距离2. 层次聚类3. K均值聚类3.1 模型3.2 策略3.3 算法3.4 算法特性4. sklearn.cluster4.1 sklearn.cluster.KMeans k均值聚类4.2 Hierarchical clustering 层次聚类聚类&#xff1a;依据样本特征的相似度或距离…

三十岁以前不必在乎的29件事

【放弃】把握的反面就是放弃&#xff0c;选择了一个机会&#xff0c;就等于放弃了其他所有的可能。当新的机会摆在面前的时候&#xff0c;敢于放弃已经获得的一切&#xff0c;这不是功亏一篑&#xff0c;这不是半途而废&#xff0c;这是为了谋求更大的发展空间&#xff1b;或者…

python写名片管理系统_Python实现名片管理系统

本文实例为大家分享了Python实现名片管理系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 目标 综合应用已经学习过的知识点&#xff1a; 变量 流程控制 函数 模块 系统需求 1. 程序启动&#xff0c;显示名片管理系统欢迎界面&#xff0c;并显示功能菜单2 用户用…

程序员面试金典 - 面试题 17.24. 最大子矩阵(转成一维最大子序和 DP)

文章目录1. 题目2. 解题2.1 前缀和&#xff08;超时&#xff09;2.2 动态规划1. 题目 给定一个正整数和负整数组成的 N M 矩阵&#xff0c;编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2]&#xff0c;其中 r1, c1 分别代表子矩阵左上角的行号和列号&…

解决mysql表被crash的一次维护始末

有客户反馈&#xff22;&#xff2f;&#xff33;&#xff33;系统无法查询到6月28日以后的话单纪录&#xff0c;查询数据库后发现在执行对原始话单表执行查询时候偶尔出现 Table ***** is marked as crashed and should be repaired. 确定计费无误后决定在下班后执行对表的修复…

ICLR盲审阶段就被评审赞不绝口的论文:会是Transformer架构的一大创新吗?

编&#xff5c;杜伟、陈萍源&#xff5c;机器之心首次&#xff01;无残差连接或归一化层&#xff0c;也能成功训练深度transformer。尽管取得了很多显著的成就&#xff0c;但训练深度神经网络&#xff08;DNN&#xff09;的实践进展在很大程度上独立于理论依据。大多数成功的现…

python自带的shell、其性能优于ipython_python3.4 shell

实验1 目的和要求(1) (2) (3) (4) (5) (6) (7) 开始 python 编程 了解什么是 python? 了解 python 的特性 学习下载和安装 python 学习执行 python ...... (2) 了解 python 的特性 (3) 学习下载和安装 python (4) 学习执行 python 命令和脚本文件的方法 (5) 学习 python 语音的…

程序员面试金典 - 面试题 08.13. 堆箱子(DP)

1. 题目 堆箱子。给你一堆n个箱子&#xff0c;箱子宽 wi、深 di、高 hi。 箱子不能翻转&#xff0c;将箱子堆起来时&#xff0c;下面箱子的宽度、高度和深度必须大于上面的箱子。 实现一种方法&#xff0c;搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。 输入使用数组…

一篇文章带你了解国企程序员(超详细)

源&#xff5c;Hollis、国企程序锅最近互联网大厂裁员不断&#xff0c;今天为大家带来了一篇超详细国企程序员攻略。文章目录入职国企心得体会一、入职前二、入职后三、工作开发内容四、钱总结&#xff1a;北京户口相关问题一、北京户口咋获得&#xff1f;二、北京户口有啥用&a…

Delphi作为客户端调用.Net写的WCF服务端?

这方面的文章太少了&#xff0c;查了半天也只看到一两篇&#xff0c;关键点 1.wcf的Binding要配成 basicHttpBinding&#xff0c;否则Delphi无法通过WebService的方式调用服务 2.Delphi IDE中的导入WSDL和安装目录下的wsdlimp.exe都无法正确识别WCF消息&#xff0c;需要到网上下…

html表单代码例子_关于React的这些细节,你知道吗?-表单

在 React 里&#xff0c;HTML 表单元素的工作方式和其他的 DOM 元素有些不同&#xff0c;这是因为表单元素通常会保持一些内部的 state。例如这个纯 HTML 表单只接受一个名称&#xff1a;此表单具有默认的 HTML 表单行为&#xff0c;即在用户提交表单后浏览到新页面。如果你在 …

程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

1. 题目 给定一个方阵&#xff0c;其中每个单元(像素)非黑即白。 设计一个算法&#xff0c;找出 4 条边皆为黑色像素的最大子方阵。 返回一个数组 [r, c, size] &#xff0c;其中 r, c 分别代表子方阵左上角的行号和列号&#xff0c;size 是子方阵的边长。 若有多个满足条件的…

js的oop方式和this指针问题

js的oop其实很简单&#xff0c;function本身就充当了类和构造函数的角色。然后通过传给构造函数的参数&#xff0c;完成类属性的赋值&#xff0c;从而实际化不同的对象。可是&#xff0c;js的oop也有很让人头疼的地方&#xff0c;其中之一就是this的指向。在js中&#xff0c;普…

史诗级学术骗局!一博士狂编 200 多篇论文,被揭发后畏罪自杀....

源&#xff5c;募格学术一博士狂编200多篇论文&#xff0c;被揭发后畏罪自杀&#xff0c;可他造成的撤稿影响直至今日还在继续&#xff0c;更有人称其的造假为科学史上最大的学术骗局之一。狂编200多篇论文发表&#xff0c;这个博士有点狠在著名学术打假网站 Retraction Watch …