陣列 三數之和 中等

2021-08-20 09:18:28 字數 1080 閱讀 3217

描述

給出乙個有n個整數的陣列s,在s中找到三個整數a, b, c,找到所有使得a + b + c = 0的三元組。

在三元組(a, b, c),要求a <= b <= c。

結果不能包含重複的三元組。

樣例如s = , 你需要返回的三元組集合的是:

(-1, 0, 1)

(-1, -1, 2)

題目鏈結

分析

因為題目說不能出現重複陣列,所以我們需要排除這種情況,一旦發現有連續相等的數字,我們就跳過這個重複值。剩下的就比較簡單了:

首先,我們需要對陣列進行排序;然後,我們固定三個數之中的乙個,讓它從頭到尾地遍歷一次。對於剩下的兩個值,讓他們在第乙個固定值到結尾最後乙個值之間,通過三個數之後與目標判斷其大小,好讓剩下的兩個值不斷的從兩端向中間逼近。最後,將與目標相等的陣列壓入vector中。

ps:下面**也寫了詳細的注釋,不懂的時候,最好在草稿上面試一試每次計算的結果,可以更方便地理解程式。

程式

class solution 

continue;

for (int j = i + 1, k = numbers.size() - 1; j < k;)

j++;

continue;

}if (k < numbers.size() - 1 && numbers[k] == numbers[k + 1])

k--;

continue;

}int target = 0;

int sum = numbers[i] + numbers[j] + numbers[k];

if (sum < target)//小於target就增加

j++;

else if (sum > target)//大於target就減少

k--;

else//等於target就存入result中,存了之後記得k++,j--

}} return result;

}};

15 三數之和(中等)

然後檢視其餘元素是否有兩數之和為val for int j i 1 j len j 如果陣列中存在三數之和為0 if map.containskey tmp nums i 和nums j 可以相等,因為他們是不同不同下標的元素 如果tmp在map中存在的數是nums j 則跳過 if nums j ...

LeetCode 15 三數之和 中等

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 class solu...

leetcode系列 演算法 中等 三數之和

雙指標先對陣列進行排序 快排 然後開始遍歷 先固定最左邊的乙個數字,假設下標為index 對固定數字的右半部分,使用雙指標遍歷,開始時的left index 1,right len nums 1 當前的三數之和sum nums index nums left nums right 然後進行如下判斷 ...