10000
File tree Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -579,6 +579,49 @@ \subsubsection{代码}
579
579
};
580
580
\end {Code }
581
581
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
+ }
65E8
622
+ };
623
+ \end {Code }
624
+
582
625
583
626
\subsubsection {相关题目 }
584
627
\begindot
You can’t perform that action at this time.
0 commit comments