由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Max Points on a Line 用c++map老是没法compile
相关主题
大家帮忙看看这个4sum怎么就不对曼哈顿距离iterator随便写了一个 请大家帮挑毛病,謝謝
写的LRU通不过大数据,帮忙看看准备回来跟大家一起练习做题了
Facebook Phone Interview问个C++里面用hash table的问题
Max points on a lineLeetcode上Two sum只能过3个case, VS能过,大牛进来看看是怎么回事
报个G的电面leetcode似乎c++11支持不完全?
lc里面那个max points O(n3)的算法也不慢啊拓扑排序
讨论一下给定平面上n点,求在同一直线上最多点问题~~大家用double /float 类型作hash key么请问下leetcode的two sum题目
刷了半天题hackerrank上的A journey to the Moon
相关话题的讨论汇总
话题: point话题: int话题: points话题: double话题: map
进入JobHunting版参与讨论
1 (共1页)
a***e
发帖数: 413
1
平时几乎不用c++,有没有哪位同学帮看看怎么能让这段程序通过编译?我觉得自己思
路是对了的,不知道如果面试中碰到这种情况是否影响?没觉得哪里template用错了啊
?多谢
主要是在
Point x(a,b);
std::map::iterator it=mp.find(x);
if (it==mp.end())
mp.insert(std::pair(x,1));
else
mp[x]++;
/**
* 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 &points) {
int n=points.size();
if (n==0) return 0;
int a=0,b=0;
map mp;

for (int i=0; i {
for (int j=i+1;j {
a=(points[j].y-points[i].y)/(points[j].x-points[j].x);
b=points[j].y-(points[i].y-points[j].y)*points[j].x/(points[
i].x-points[j].x);
Point x(a,b);
std::map::iterator it=mp.find(x);
if (it==mp.end())
mp.insert(std::pair(x,1));
else
mp[x]++;
}
}
int res=-1;
for(auto it = mp.begin(); it != mp.end(); it++)
{
if (it->second>res)
{
res=it->second;
}
}

return res;
}
};
U***A
发帖数: 849
2
map
不知道如何比较你的key (Point).
你可以定义你的map为
map, int>
或者参考这个link。
http://stackoverflow.com/questions/1112531/what-is-the-best-way
r*******e
发帖数: 971
3
哥们,你这个算法有问题啊。
1 为啥用map不用unordered_map? map 是棵树啊,后一个才是hashMap。不过这个其实
无所谓。
2. a=(points[j].y-points[i].y)/(points[j].x-points[j].x);
结果不是整数啊,会被强制取整的啊,这样不好。
下一行也是。
3. x 是个Point啊,我记得map活着unordered——map 对[]的重载只有在x是
primitive type才行。
r*******e
发帖数: 971
4
楼上的楼上(2楼)说的对。

【在 r*******e 的大作中提到】
: 哥们,你这个算法有问题啊。
: 1 为啥用map不用unordered_map? map 是棵树啊,后一个才是hashMap。不过这个其实
: 无所谓。
: 2. a=(points[j].y-points[i].y)/(points[j].x-points[j].x);
: 结果不是整数啊,会被强制取整的啊,这样不好。
: 下一行也是。
: 3. x 是个Point啊,我记得map活着unordered——map 对[]的重载只有在x是
: primitive type才行。

a***e
发帖数: 413
5
多谢。
改了改,还是通不过,看来得VS里面debug去了
/**
* 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 &points) {
int n=points.size();
if (n==0) return 0;
double a=0,b=0;
map, int> mp;
int x1,x2,y1,y2;

for (int i=0; i {
for (int j=i+1;j {
y1=points[j].y, y2=points[i].y,x1=points[j].x, x2=points[i].
x;
if (x1==x2)
{
a=0;
b=x1;
}
else
{
a=double(y1-y2)/double(x1-x2);
b=double(y2)-double(y1-y2)*x2/(x1-x2);
}
std::map,int>::iterator it=mp.find(pair<
double,double>(a,b));
if (it==mp.end())
mp.insert(std::pair,int>(pair double>(a,b),2));
else
mp[pair(a,b)]++;
}
}
int res=1;
for(auto it = mp.begin(); it != mp.end(); it++)
{
if (it->second>res)
{
res=it->second;
}
}

return res;
}
};
r*******e
发帖数: 971
6
看我在Leetcode上面刚刚写的答案。26ms
https://oj.leetcode.com/discuss/22057/my-solution-without-nested-map-in-c
a***e
发帖数: 413
7
看了你的解法,但是直接存斜率不行吗?是担心精度问题是吧?但是int/int 精度可能
没啥影响吧?
r*******e
发帖数: 971
8
你比较double值肯定不会用==吧?这里也是一样的,找key的时候可能不准。
当然我见过别人用直接存储斜率的办法,也能过。

【在 a***e 的大作中提到】
: 看了你的解法,但是直接存斜率不行吗?是担心精度问题是吧?但是int/int 精度可能
: 没啥影响吧?

a***e
发帖数: 413
9
我再看了看 http://www.cplusplus.com/reference/unordered_map/unordered_map/unordered_map/
请问你怎么知道那个map不用先判断是否里面有key对应的val,直接就像你那么写?int
curr=++map[key];(我是说你那么写是对的,但我不知道哪里能找到可以那么用的说
明?)
key=0L;key+=x;key<<=32;key+=y;
//find x,then y;
int curr=++map[key];
localmax=max(curr,localmax);
不用先判断key是否存在,像下面myMap这样
int hor = points[j].x - points[i].x;
int ver = points[j].y - points[i].y;
float k = 0==hor? numeric_limits::infinity() : 1.0*
ver/hor;
if (myMap.find(k)!=myMap.end())
{
myMap[k]++;
}
else
{
myMap[k] = 1;
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
hackerrank上的A journey to the Moon报个G的电面
leetcode: integer to roman 结果不同lc里面那个max points O(n3)的算法也不慢啊
关于Hash_map讨论一下给定平面上n点,求在同一直线上最多点问题~~大家用double /float 类型作hash key么
T家电面面经并且不解为何被秒拒刷了半天题
大家帮忙看看这个4sum怎么就不对曼哈顿距离iterator随便写了一个 请大家帮挑毛病,謝謝
写的LRU通不过大数据,帮忙看看准备回来跟大家一起练习做题了
Facebook Phone Interview问个C++里面用hash table的问题
Max points on a lineLeetcode上Two sum只能过3个case, VS能过,大牛进来看看是怎么回事
相关话题的讨论汇总
话题: point话题: int话题: points话题: double话题: map