由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 我这个 3Sum 怎么过不了leetcode的测试阿
相关主题
求助:3sum总是运行不过3sum on LeetCode OJ
leetcode 3sum求Leetcode 3Sum 能过大数据的python解法……
请问大牛leetcode 3Sum 和4sum的问题find max in shifted sorted array
leetcode我这2个palindrome的为什么过不了大oj关于找Kth Min in 2 sorted array的问题(leetcode请进)
我这个 4sum的解法是 o^3还是o^2? , xiexie求助各位大牛:LeetCode的Decode Ways
leetcode一道简单题讨论:给出n,k,列出所有组合可能leetcode 关于Partition List
请教下3sum为撒超时Find Median Of Two Sorted Arrays
leetcode 3sum c++解法超时lc新题,贴个刚写的solution
相关话题的讨论汇总
话题: int话题: vector话题: num话题: set话题: tmp
进入JobHunting版参与讨论
1 (共1页)
q****m
发帖数: 177
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;

}
};
C***U
发帖数: 2406
2
是你的计算太复杂了吧
用个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)
: {

q****m
发帖数: 177
3
这个 vector > 是 leetcode里面给出的 prototype阿。

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

C***U
发帖数: 2406
4
先用set存 再转到vector 比你比较要快吧

【在 q****m 的大作中提到】
: 这个 vector > 是 leetcode里面给出的 prototype阿。
q****m
发帖数: 177
5
优化了以后,终于可以 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 比你比较要快吧
q****m
发帖数: 177
6
难道是因为用了 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;

}
};
C***U
发帖数: 2406
7
是你的计算太复杂了吧
用个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)
: {

q****m
发帖数: 177
8
这个 vector > 是 leetcode里面给出的 prototype阿。

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

C***U
发帖数: 2406
9
先用set存 再转到vector 比你比较要快吧

【在 q****m 的大作中提到】
: 这个 vector > 是 leetcode里面给出的 prototype阿。
q****m
发帖数: 177
10
优化了以后,终于可以 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 比你比较要快吧
T******7
发帖数: 1419
11
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)

q****m
发帖数: 177
12
O(n^2)

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

1 (共1页)
进入JobHunting版参与讨论
相关主题
lc新题,贴个刚写的solution我这个 4sum的解法是 o^3还是o^2? , xiexie
【leetcode restore IP address】为什么这种情况一定要用tmp?leetcode一道简单题讨论:给出n,k,列出所有组合可能
请教下leetcode Permutations II请教下3sum为撒超时
[solved]stock这题目我 自己调试没问题,为什么leetcode总过不去leetcode 3sum c++解法超时
求助:3sum总是运行不过3sum on LeetCode OJ
leetcode 3sum求Leetcode 3Sum 能过大数据的python解法……
请问大牛leetcode 3Sum 和4sum的问题find max in shifted sorted array
leetcode我这2个palindrome的为什么过不了大oj关于找Kth Min in 2 sorted array的问题(leetcode请进)
相关话题的讨论汇总
话题: int话题: vector话题: num话题: set话题: tmp