我正在leetcode.com上做3sum问题
蛮力的时间复杂度为O(N ^ 3)。
我使用哈希表,所以我认为时间复杂度为O(N ^ 2)。
但是,我仍然有TLE(超出时间限制)
如何加速我的代码?
下面是我的代码
非常感谢!
{{1}}
答案 0 :(得分:0)
你的解决方案实际上不是O(n^2)
,它绝对比O(n^2)
贵。 O(n^2)
中没有任何优化的解决方案将无法通过OJ。这是我的解决方案O(n^2)
。我在代码中加了解释说明。
vector<vector<int> > threeSum(vector<int> &num) {
vector <vector<int> > result;
size_t n = num.size();
if(n < 3) return result;
vector<int> solution(3);
sort(num.begin(), num.end());
for(int i = 0; i < n - 2; ++i) {
int start = i + 1, end = n - 1;
while(start < end) {
int sum = num[start] + num[end] + num[i];
if(sum == 0) {
solution.at(0) = num[i];
solution.at(1) = num[start];
solution.at(2) = num[end];
result.push_back(solution);
// these loops will skip same elements and fasten the algorithm
// while(start < n - 1 and num[start] == num[start + 1]) start++;
// while(end > i + 1 and num[end] == num[end - 1]) end--;
start++, end--;
} else if(sum > 0) {
// while(end > i + 1 and num[end] == num[end - 1]) end--;
end--;
} else {
// while(start < n - 1 and num[start] == num[start + 1]) start++;
start++;
}
}
while(i < n - 1 and num[i] == num[i + 1]) i++;
}
return result;
}
如果您有任何疑问,请与我们联系。希望它有所帮助!