LeetCode - Max Points on a Line

https://leetcode.com/problems/max-points-on-a-line/

注意,点a, b的斜率和b,c的斜率相同的话,就说明a, b, c在一条线上了。不用再看y = k*x+t中的t值了,只需要看k值就可以了。

另外,可以用hashtable来保存已经出现过的斜率,而且相同的点也要注意。

JAVA的double比较不用担心underflow的问题。

hashmap放在循环外层的话,就不能把相同的点加到已经出现的ratio count上了,所以hashtable在里层,因为这时候hashtable保存的是这个点所有线的ratio,所以,跟这个点相同的点可以直接加上hashtable里面的ratio count上。

另外要注意斜率是正无穷和0的情况。

代码今天实在不想写了。。。见这里吧:http://blog.csdn.net/linhuanmars/article/details/21060933

有空把这道题补上。。。。

下面是C++代码,需要注意的是,如果全是重复的点,那么map是空的,进入不了第二个循环,所以在第二个循环前加一句,更新只有duplicate点的情况。另一种方法是不需要iterator,直接在更新umap[key]的时候更新map内的最大值,或者在。下面用的是:

class Solution {
public:
    int maxPoints(vector<Point> &points) {
        unordered_map<float, int> umap;
        int rst = 0;
        for(int i=0; i<points.size(); i++){
            umap.clear();  //umap[INT_MIN]=0,也可以解决map是空的情况
            int localmax = 0;
            int duplicate = 1;
            for(int j=0; j<points.size(); j++){
                if(j==i) continue;
                if(points[i].x==points[j].x && points[i].y==points[j].y){
                    duplicate++;
                    continue;
                }
                float key = (points[j].x==points[i].x)?INT_MAX:
                            ((float)(points[i].y-points[j].y))/(points[i].x-points[j].x);
                umap[key]++;  //rst = std::max(rst, umap[key])解决map是空的情况
            }
            rst = std::max(duplicate, rst); //解决map是空的情况
            for(unordered_map<float, int>::iterator it=umap.begin(); it!=umap.end(); it++){
                if((it->second+duplicate)>rst){
                    rst = it->second+duplicate;
                }
            }
        }
        return rst;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值