8000 3sum time exceeding problem · weizier/leetcode@92f8cd1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 92f8cd1

Browse files
committed
3sum time exceeding problem
1 parent 60a44ba commit 92f8cd1

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

C++/chapLinearList.tex

+43
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,49 @@ \subsubsection{代码}
579579
};
580580
\end{Code}
581581

582+
\subsubsection{分析}
583+
先排序,然后左右夹逼,复杂度 $O(n^2)$
584+
需要返回没有duplicate的结果。每次寻找新结果就排除那些可能重复的数字,外层i如果与之前一样则进行下一个,
585+
同理对里层夹逼的两个数也是这样来避免。
586+
\subsubsection{代码}
587+
\begin{Code}
588+
class Solution {
589+
public:
590+
vector<vector<int> > threeSum(vector<int> &num){
591+
sort(num.begin(), num.end());
592+
vector<vector<int> > result;
593+
if(num.size() < 3) return result;
594+
for(int i = 0; i < num.size() - 2; ++i){
595+
if(i && num[i] == num[i - 1]) continue;
596+
int j = i + 1;
597+
int k = num.size() - 1;
598+
while(j < k){
599+
if(num[i] + num[j] + num[k] == 0){
600+
result.push_back({num[i], num[j], num[k]});
601+
++j, --k;
602+
while(num[j] == num[j - 1] && num[k] == num[k + 1] && j < k){
603+
++j, --k;
604+
}
605+
}
606+
else if(num[i] + num[j] + num[k] < 0){
607+
++j;
608+
while(num[j] == num[j - 1] && j < k){
609+
++j;
610+
}
611+
}
612+
else{
613+
--k;
614+
while(num[k] == num[k + 1] && j < k){
615+
--k;
616+
}
617+
}
618+
}
619+
}
620+
return result;
621+
}
622+
};
623+
\end{Code}
624+
582625

583626
\subsubsection{相关题目}
584627
\begindot

C++/leetcode-cpp.synctex.gz(busy)

Whitespace-only changes.

0 commit comments

Comments
 (0)
0