当前位置: 首页 > news >正文

[LeetCode]Max Points on a Line

Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.

[LeetCode Source]

思路:对每个节点求和其它节点的斜率,用hash_map统计斜率同样的点数。时间O(N^2),空间O(N)。应该有更简单能够在O(1)空间的算法。临时没想出来。

这道题目AC率低的原因是因为各种边界条件,要注意:

1)有反复点的情况;

2)点数少于2的情况。

3)有垂直点(斜率为无穷)的情况。

遍历节点时注意已经遍历的节点不用再遍历了,避免反复遍历。

比方已经对前i个节点求了最大值,对第i+1个节点就不用再遍历前i个节点算斜率。由于之前节点已经对i+1点求过斜率算过最大值。

代码例如以下:

/**
 * 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 size = points.size();
        if(size<=1)
            return size;
        int res = 0;
        for(int i=0;i<size;++i){
            int local = 1;
            int Vertical = 0;
            int Dup = 0;
            double k= 0.0;
            unordered_map<double,int> map;
            for(int j=i+1;j<size;++j){ //仅仅需对i+1大的值的点求线,由于以之前为小于i+1起点的直线已经遍历过i+1点,再求解就是反复遍历了
                if(points[i].x == points[j].x){
                    if(points[i].y == points[j].y)
                        Dup++; //统计反复的点数
                    else
                        Vertical++; //统计水平的点数
                }
                else{
                    k = (points[j].y-points[i].y)*1.0/(points[j].x-points[i].x);
                    map[k]==0?

map[k]=2:map[k]++; //计算在同一直线上的点 local = max(local,map[k]); //和该节点在同一直线上的最大点数 } } local = max(local+Dup,Vertical+Dup+1);//该节点加上反复的节点。注意水平和反复节点有可能是最大值 res = max(local,res);//计算全部解中的最大的节点 } return res; } };



转载于:https://www.cnblogs.com/lytwajue/p/6801761.html

相关文章:

  • [Noi2015]程序自动分析
  • SVN学习(一)——SVN 检出文件步骤、图标显示及含义
  • 【面试】【Spring常见问题总结】【06】
  • acd - 1427 - Nice Sequence(线段树)
  • TCP协议设计原理
  • bzoj 4033: [HAOI2015]树上染色 [树形DP]
  • justgage.js的使用
  • requests模块
  • C#访问修饰符学习整理
  • 5.5下午
  • 『ORACLE』 创建表(11g)
  • javascript基础 方法
  • Objective-C语言精华概要
  • 【计划】2017年5月计划
  • Coder-Strike 2014 - Round 2
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • AngularJS指令开发(1)——参数详解
  • Javascript 原型链
  • JavaWeb(学习笔记二)
  • jquery ajax学习笔记
  • Laravel5.4 Queues队列学习
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • pdf文件如何在线转换为jpg图片
  • windows-nginx-https-本地配置
  • 从输入URL到页面加载发生了什么
  • 规范化安全开发 KOA 手脚架
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 使用API自动生成工具优化前端工作流
  • 通信类
  • 一道闭包题引发的思考
  • 应用生命周期终极 DevOps 工具包
  • ​ssh免密码登录设置及问题总结
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #pragma pack(1)
  • #每日一题合集#牛客JZ23-JZ33
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (3)(3.5) 遥测无线电区域条例
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (6)设计一个TimeMap
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (独孤九剑)--文件系统
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (七)Knockout 创建自定义绑定
  • (四)Linux Shell编程——输入输出重定向
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)大型网站架构演变和知识体系
  • (转)项目管理杂谈-我所期望的新人
  • .NET MVC之AOP
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net分布式压力测试工具(Beetle.DT)
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600