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

Lint Code——最多共线的点的个数

题目链接:http://www.lintcode.com/zh-cn/problem/max-points-on-a-line/#

条件:给一个点数组

目标:求出共线的点的最多个数

实现:时间复杂度——O(n^2)

   要考虑的特殊情况是:①有相同点(这个也太特喵隐蔽了)②斜率不存在的点

思路:暴力求解,遍历每一个点,与他之后的点进行匹配,用一个map<double,int>存储斜率对应的个数。

代码:

/**
 * 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:
    /**
     * @param points an array of point
     * @return an integer
     */
    bool check(map<double,int> &res,double k){
        map<double ,int >::iterator it;
        it=res.find(k);
        if(it==res.end()){
            return false;
        }
        return true;
    }
    void change(map<double,int> &res,double k,int &num){
        
        map<double ,int >::iterator it;
        it=res.find(k);
        it->second++;
        if(it->second>num){
            num=it->second;
        }
    }

    int maxPoints(vector<Point>& points) {
        // Write your code here
        int num=0;
        if(points.size()==0){
            return num;
        }
        num=1;
        
        Point point_i,point_j;
        double k;
        
        for(int i=0;i<points.size();i++){
            point_i=points[i];
            int same=1;
            map<double,int> res;
            map<double ,int >::iterator it;
            for(int j=i+1;j<points.size();j++){
                point_j=points[j];
                if(point_j.x-point_i.x == 0 && point_j.y-point_i.y ==0 ){//同一点
                    same++;
                }else if(point_j.x-point_i.x == 0 && point_j.y-point_i.y !=0){
                    k=(numeric_limits<double>::max)();
                    if(check(res,k)){
                        it=res.find(k);
                        it->second++;
                    }else {
                        res.insert(pair<double,int>(k,1));
                    }
                }else if(point_j.x-point_i.x != 0 ){
                    k=(point_j.y-point_i.y)*1.0/(point_j.x-point_i.x);
                    if(check(res,k)){
                        it=res.find(k);
                        it->second++;
                    }else {
                        res.insert(pair<double,int>(k,1));
                    }
                }
            }
            if(res.empty()){
                if(same>num){
                    num=same;
                }
            }
            for(it=res.begin();it!=res.end();it++){
                if(it->second+same>num){
                    num=it->second+same;
                }
            }
        }
        return num;
    }
};
View Code

 

转载于:https://www.cnblogs.com/sylz/p/6181718.html

相关文章:

  • 【bzoj1433】 ZJOI2009—假期的宿舍
  • 【干货分享】前端面试知识点锦集01(HTML篇)——附答案
  • Liunx面试题
  • 关于面试别问及Spring如何回答思路总结!
  • Js 根据身份证号获取年龄-性别
  • linux下正确安装jsoncpp
  • hive 复杂类型
  • SQL Case when 的使用方法
  • 设计模式--适配器模式Adapter(结构型)
  • 各种文件的mime类型
  • [游戏开发-学习笔记]菜鸟慢慢飞(三)-官方教程学习小心得
  • Object类中getClass()
  • dubbo问题求解
  • 单例模式浅析
  • Django基于Pycharm开发之二 [使用django adminSite]
  • 【Leetcode】101. 对称二叉树
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • CAP理论的例子讲解
  • JavaScript DOM 10 - 滚动
  • javascript面向对象之创建对象
  • Java读取Properties文件的六种方法
  • jQuery(一)
  • Mac转Windows的拯救指南
  • Node + FFmpeg 实现Canvas动画导出视频
  • React-redux的原理以及使用
  • SSH 免密登录
  • Vue学习第二天
  • 给github项目添加CI badge
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 用Python写一份独特的元宵节祝福
  • 怎么把视频里的音乐提取出来
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 阿里云重庆大学大数据训练营落地分享
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #include
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (7)STL算法之交换赋值
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十一)手动添加用户和文件的特殊权限
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .aanva
  • .jks文件(JAVA KeyStore)
  • .NET 分布式技术比较
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET委托:一个关于C#的睡前故事
  • @TableLogic注解说明,以及对增删改查的影响
  • [Android] Amazon 的 android 音视频开发文档
  • [Android] 修改设备访问权限
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [CISCN2019 华北赛区 Day1 Web2]ikun
  • [CTO札记]如何测试用户接受度?