题目

对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

思路

复杂度肯定是o(n^2)的,即两层遍历可以完成任务。那么最大的问题的就是如何实现了,需要考虑的有如下几点:

  • 1.在第一层遍历时,给定一个点i,再遍历剩余的点,这些点一旦和给定点的斜率是一样的,那么肯定是处于一条直线中,所有思路是可以建立一个哈希表,即建立一个以斜率为键,共线的点的数目为值的映射表;
  • 2.要考虑重复的点;
  • 3.最后共线的点的数目是最大共现数目加上重复的点数目;
  • 4.要考虑垂直的点,斜率不存在的情况,单独拎出来讨论;
  • 5.有些同学说斜率k无法唯一确定直线,这是因为要考虑截距。我们这里是针对一个定点而言,其他的点和这个定点的斜率如果一致,当然是可以确定处于同一条直线上。
/*** Definition for a point.* struct Point {*     int x;*     int y;*     Point() : x(0), y(0) {}*     Point(int a, int b) : x(a), y(b) {}* };*/
class Solution {public:int maxPoints(vector<Point> &points) {int n = points.size();if (n==0) return 0;else if (n==1) return 1;int max_value = 0;for (int i=0;i<n;i++){int repeat = 0;int vertical = 0;map<double,int> mp;int curmax = 1;for(int j=0;j<n;j++){if (i !=j){double delta_x = points[j].x - points[i].x;double delta_y = points[j].y - points[i].y;if (delta_y == 0 && delta_x== 0) {repeat +=1;}else if (delta_x ==0) {if (vertical ==0)vertical =2;else{vertical +=1;}curmax = max(vertical, curmax);}else{double k = delta_y/delta_x;if (mp[k]==0) {mp[k] =2;curmax = max(mp[k],curmax);}else{mp[k] += 1;curmax = max(mp[k],curmax);}}}}max_value = max(max_value, curmax+repeat);}return max_value;}
};

leetcode每日一道(3)最多能有多少个点位于同一直线上相关推荐

  1. 【LeetCode】3 求最多能有多少个点位于同一直线上

    码上生花,ECharts 作品展示赛正式启动!>>> 题目: 对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上 思路: 1.如果坐标point的数组Point[ ...

  2. 对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上

    解题思路: 小于 3 个点的结果就是点数 点数多于2个点的时候: 关键:判断每个点和其他点之间的斜率相等的最多的个数 1)取1个点的坐标,计算出和另一个点斜率的分母和分子 2) 遍历取1个点 和 1) ...

  3. 枚举:1.对于给定的n个位于同一二维平面上的点,求最多能有多少个点位于同一直线上

    /*** Definition for a point.* class Point {* int x;* int y;* Point() { x = 0; y = 0; }* Point(int a, ...

  4. leetcode每日一道(15)环形路上加油站起点问题,绝妙思路

    题目描述 环形路上有n个加油站,第i个加油站的汽油量是gas[i]. 你有一辆车,车的油箱可以无限装汽油.从加油站i走到下一个加油站(i+1)花费的油量是cost[i],你从一个加油站出发,刚开始的时 ...

  5. leetcode最小面积_每日一道 LeetCode (51):盛最多水的容器

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  6. 每日一道 LeetCode (51):盛最多水的容器

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  7. php算法在线刷题,c,算法_每日一道算法:leetcode 刷题碰到的问题。,c,算法 - phpStudy...

    每日一道算法:leetcode 刷题碰到的问题. 这是题目: Given an unsorted array nums, reorder it such that nums[0] < nums[ ...

  8. atoi函数_每日一道 LeetCode (50):字符串转换整数 (atoi)

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

  9. 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

最新文章

  1. 将数据库查询结果导出成Excel表格
  2. 算盘与电子计算机的区别之一是,算盘与电子计算机的区别之一是算盘没有存储能力...
  3. openssl加密http网站过程1
  4. 开源网店系统_amazon都做不行,就不可构建外贸网店系统吗?
  5. 梅耶尔被爆7月份便已知用户数据遭窃 SEC或介入调查
  6. 【重要】ES6-23 JavaScript模块化
  7. Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍
  8. SAP License:SAP 期待CO新帐 VS FI新总帐
  9. 我问你as3中 0.2 + 0.1 ==?
  10. MIC检测方式(六)
  11. smale学习之数学表达式(day1)
  12. Java开发笔记(一百四十九)引入预报告的好处
  13. JavaWeb SSM酒店信息管理系统
  14. matlab绘制折线图
  15. python常见语法错误
  16. “槑囧圐圙”您认得这些汉字吗?
  17. keybd_event模拟键盘输入
  18. 新闻学应该掌握哪些计算机技能,哪些人适合学新闻学专业 要掌握哪些技能
  19. 写给IT自学者的入门指南
  20. 记一次在咸鱼上购买 MacBook Pro 的经历

热门文章

  1. 00后抛弃互联网: 毕业不想进大厂,要去搞最潮Web3
  2. 新一轮商业革命将至,张勇用“敏捷组织”率先交出答卷
  3. 手机wps怎样调出写字笔_手机wps文档怎样使用笔功能
  4. linux中的“~”,“./”,“/“具体含义
  5. 文件格式FAT、FAT32、exFAT之间有什么区别?
  6. 2013年9月、10月找工作总结篇
  7. 史上最强最经典的国足评论
  8. linux pts设备,Linux中tty和pts指的是什么
  9. 如何成为一名黑客 (英文原文 )
  10. 【KingbaseES】sys_dump逻辑备份工具详解