avatar
leetcode 3sum c++解法超时# JobHunting - 待字闺中
s*n
1
用了unordered_map来check第三个数是否存在,如果unordered_map是O(1),那整个
算法复杂度是O(n*n)啊,为什么过不了large test?
class Solution {
public:
vector > threeSum(vector &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
sort(num.begin(),num.end());
unordered_map m;
for (size_t i=0; im.insert (make_pair(num[i],true));
}
vector > solution_set;
for (size_t i=0; iint number_1 = num[i];
for (size_t j=i+1; jint number_2 = num[j];
if (j+1 ==num.size()){//j is the last element
break;
}
if (0-number_1-number_2 < num[j+1]){
break;
}
if (m.find(0-number_1-number_2)!=m.end()){

vector solution (3);
solution[0] = number_1;
solution[1] = number_2;
solution[2] = 0-number_1-number_2;
solution_set.push_back(solution);
}
}

}
vector > unique_solution_set;
for (size_t i = 0; i < solution_set.size(); ++i){
vector potential_solution = solution_set[i];
bool flag = true;
for (size_t j = 0; j < unique_solution_set.size(); ++j){
vector verified_solution = unique_solution_set[j];
if (potential_solution[0] == verified_solution[0] &&
potential_solution[1] == verified_solution[1] &&
potential_solution[2] == verified_solution[2]){
flag = false;
break;
}
}
if (flag == true){
unique_solution_set.push_back(potential_solution);
}
}
return unique_solution_set;
}
};
avatar
s*n
2
ding

【在 s*****n 的大作中提到】
: 用了unordered_map来check第三个数是否存在,如果unordered_map是O(1),那整个
: 算法复杂度是O(n*n)啊,为什么过不了large test?
: class Solution {
: public:
: vector > threeSum(vector &num) {
: // Start typing your C/C++ solution below
: // DO NOT write int main() function
: sort(num.begin(),num.end());
: unordered_map m;
: for (size_t i=0; i
avatar
c*k
3
手机上看有的不清楚,但是你判断唯一解似乎太慢了。worst case是n^4
把solution set排序来去重复
avatar
s*n
4
有道理,每个solution set的size是C(n,3),C(n,3)*C(n,3) is O(n^6)

【在 c***k 的大作中提到】
: 手机上看有的不清楚,但是你判断唯一解似乎太慢了。worst case是n^4
: 把solution set排序来去重复

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。