Redian新闻
>
【EB3 2015年一月第3绿】代同事报绿,EB3新年第三绿。
avatar
【EB3 2015年一月第3绿】代同事报绿,EB3新年第三绿。# EB23 - 劳工卡
q*m
1
难道是因为用了 std::sort ?
class Solution {
public:
vector > threeSum(vector &num) {
vector > *set = new vector >;
vector a(num);
sort(a.begin(), a.end());
vector b(num);
for(int k = 0; k < a.size(); ++k)
{
int c = a[k];
for(int j = 0; j < b.size(); ++j)
{
b[j] = -c - a[j];
}

int i = 0;
int j = b.size() -1 ;
while(i < a.size() && j > -1)
{
if (a[i] == b[j])
{
if(i == j)
{
++i;
--j;
continue;
}
if( i == k)
{
++i;
--j;
continue;
}
if( j == k)
{
++i;
--j;
continue;
}
int e = (i < j) ? i : j;
int f = i + j - e ;
int g;
if(k > f)
{
g = k;
}
else if(k > e)
{
g = f;
f = k;
}
else
{
g = f;
f = e;
e = k;
}
vector tmp;
tmp.push_back(a[e]);
tmp.push_back(a[f]);
tmp.push_back(a[g]);
if(find(set->begin(), set->end(), tmp) == set->end())
{
set->push_back(tmp);
}
++i;
--j;
}
else if(a[i] < b[j])
{
++i;
}
else
{
--j;
}
}

}
return *set;

}
};
avatar
G*3
2
EB2 -> EB3 downgrade .
PD 2011.2.23
RD 2014.1.21
FP 2014.2.14
SR 2015.1.2
Decision 2015.1.3
周六凌晨3点收到批了。
avatar
C*U
3
是你的计算太复杂了吧
用个set来处理重复试试
不要用那个vector>

【在 q****m 的大作中提到】
: 难道是因为用了 std::sort ?
: class Solution {
: public:
: vector > threeSum(vector &num) {
: vector > *set = new vector >;
: vector a(num);
: sort(a.begin(), a.end());
: vector b(num);
: for(int k = 0; k < a.size(); ++k)
: {

avatar
G*3
4
NSC
avatar
q*m
5
这个 vector > 是 leetcode里面给出的 prototype阿。

【在 C***U 的大作中提到】
: 是你的计算太复杂了吧
: 用个set来处理重复试试
: 不要用那个vector>

avatar
c*m
6
大周末还批case,敬业
avatar
C*U
7
先用set存 再转到vector 比你比较要快吧

【在 q****m 的大作中提到】
: 这个 vector > 是 leetcode里面给出的 prototype阿。
avatar
l*n
8
Gx!
avatar
q*m
9
优化了以后,终于可以 pass large 了. 思路是先对 num 排序. 排序后 num[i] + num
[j] + num[k] = 0中只用考虑 i < j < k的情况
class Solution {
public:
vector > threeSum(vector &num) {
vector > *set = new vector >;
sort(num.begin(), num.end());
vector b;
b.reserve(num.size());
for(int k = 0; k < num.size(); ++k)
{
int c = num[k];
for(int j = 0; j < k; ++j)
{
b[j] = -c - num[j];
}

int i = 0;
int j = k - 1 ;
while(i < k && j > -1)
{
if (num[i] == b[j])
{
if(i >= j)
{
break;
}
vector tmp;
tmp.push_back(num[i]);
tmp.push_back(num[j]);
tmp.push_back(num[k]);
if(find(set->begin(), set->end(), tmp) == set->end())
{
set->push_back(tmp);
}
++i;
--j;
}
else if(num[i] < b[j])
{
++i;
}
else
{
--j;
}
}

}
return *set;

}
};

【在 C***U 的大作中提到】
: 先用set存 再转到vector 比你比较要快吧
avatar
M*r
10
Cong!
avatar
q*m
11
难道是因为用了 std::sort ?
class Solution {
public:
vector > threeSum(vector &num) {
vector > *set = new vector >;
vector a(num);
sort(a.begin(), a.end());
vector b(num);
for(int k = 0; k < a.size(); ++k)
{
int c = a[k];
for(int j = 0; j < b.size(); ++j)
{
b[j] = -c - a[j];
}

int i = 0;
int j = b.size() -1 ;
while(i < a.size() && j > -1)
{
if (a[i] == b[j])
{
if(i == j)
{
++i;
--j;
continue;
}
if( i == k)
{
++i;
--j;
continue;
}
if( j == k)
{
++i;
--j;
continue;
}
int e = (i < j) ? i : j;
int f = i + j - e ;
int g;
if(k > f)
{
g = k;
}
else if(k > e)
{
g = f;
f = k;
}
else
{
g = f;
f = e;
e = k;
}
vector tmp;
tmp.push_back(a[e]);
tmp.push_back(a[f]);
tmp.push_back(a[g]);
if(find(set->begin(), set->end(), tmp) == set->end())
{
set->push_back(tmp);
}
++i;
--j;
}
else if(a[i] < b[j])
{
++i;
}
else
{
--j;
}
}

}
return *set;

}
};
avatar
p*e
12
Congrats, good sign!
avatar
C*U
13
是你的计算太复杂了吧
用个set来处理重复试试
不要用那个vector>

【在 q****m 的大作中提到】
: 难道是因为用了 std::sort ?
: class Solution {
: public:
: vector > threeSum(vector &num) {
: vector > *set = new vector >;
: vector a(num);
: sort(a.begin(), a.end());
: vector b(num);
: for(int k = 0; k < a.size(); ++k)
: {

avatar
G*3
14
谢谢版花,代同事说一声,我爱你们,还有老赫和yoyo.
avatar
q*m
15
这个 vector > 是 leetcode里面给出的 prototype阿。

【在 C***U 的大作中提到】
: 是你的计算太复杂了吧
: 用个set来处理重复试试
: 不要用那个vector>

avatar
c*3
16
cong
avatar
C*U
17
先用set存 再转到vector 比你比较要快吧

【在 q****m 的大作中提到】
: 这个 vector > 是 leetcode里面给出的 prototype阿。
avatar
n*2
18
gxgx
avatar
q*m
19
优化了以后,终于可以 pass large 了. 思路是先对 num 排序. 排序后 num[i] + num
[j] + num[k] = 0中只用考虑 i < j < k的情况
class Solution {
public:
vector > threeSum(vector &num) {
vector > *set = new vector >;
sort(num.begin(), num.end());
vector b;
b.reserve(num.size());
for(int k = 0; k < num.size(); ++k)
{
int c = num[k];
for(int j = 0; j < k; ++j)
{
b[j] = -c - num[j];
}

int i = 0;
int j = k - 1 ;
while(i < k && j > -1)
{
if (num[i] == b[j])
{
if(i >= j)
{
break;
}
vector tmp;
tmp.push_back(num[i]);
tmp.push_back(num[j]);
tmp.push_back(num[k]);
if(find(set->begin(), set->end(), tmp) == set->end())
{
set->push_back(tmp);
}
++i;
--j;
}
else if(num[i] < b[j])
{
++i;
}
else
{
--j;
}
}

}
return *set;

}
};

【在 C***U 的大作中提到】
: 先用set存 再转到vector 比你比较要快吧
avatar
t*p
20
恭喜恭喜

【在 G*********3 的大作中提到】
: EB2 -> EB3 downgrade .
: PD 2011.2.23
: RD 2014.1.21
: FP 2014.2.14
: SR 2015.1.2
: Decision 2015.1.3
: 周六凌晨3点收到批了。

avatar
T*7
21
what is your code's time complexity in you opinion?
tahnks

num

【在 q****m 的大作中提到】
: 优化了以后,终于可以 pass large 了. 思路是先对 num 排序. 排序后 num[i] + num
: [j] + num[k] = 0中只用考虑 i < j < k的情况
: class Solution {
: public:
: vector > threeSum(vector &num) {
: vector > *set = new vector >;
: sort(num.begin(), num.end());
: vector b;
: b.reserve(num.size());
: for(int k = 0; k < num.size(); ++k)

avatar
c*t
22
congrats!
avatar
q*m
23
O(n^2)

【在 T******7 的大作中提到】
: what is your code's time complexity in you opinion?
: tahnks
:
: num

avatar
j*9
24
恭喜。timeline和我很相似。希望我也快点绿。TSC加油吧。
avatar
v*6
25
cong
avatar
b*t
26
恭喜恭喜,好久没这么密集地看到有人报绿了,好兆头啊
avatar
q*1
27
wow, so many downgrades
avatar
f*r
28
Cong
avatar
H*C
29
cong
avatar
c*i
30
恭喜恭喜
avatar
l*n
31
谢谢。新年快乐!
看到一个一个熟悉的ID报绿,又开心,又感慨。希望更多的同学早日报绿,又惋惜越来
越多的熟人离开论坛。当然,开心是主要的。

【在 G*********3 的大作中提到】
: 谢谢版花,代同事说一声,我爱你们,还有老赫和yoyo.
avatar
s*p
32
恭喜
avatar
p*9
33
恭喜恭喜。沾点喜气
avatar
r*d
34
pai
avatar
w*2
35
Congratulations
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。