給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[[-1, 0, 1],
[-1, -1, 2]
]可以先將陣列進行排序,我們不妨令a為最小的那個數,我們從最小的數以此進行,顯然a>0,則不存在a、b、c滿足題意了,可以終止迴圈。在迴圈中,我們令j=i+1,k=n-1,則nums[j]、nums[k]充當我們的b和c,如果b+c>-a,則大的數就選大了,k–;如果b+c<-a,則小的數就選小了,j++。顯然,這是二分查詢的乙個思想。
因為我們要去重,所以,在b+c==-a的情況下,我們要避免nums[j]==nums[j-1],這樣便可以去掉一部分重複資料。同時對於a的選擇,我們也去掉重複的資料,這樣就不會有重複的數了
vectorint>>
threesum
(vector<
int>
& nums)
; ans.
push_back
(num);}
j++; k--;}
else
if(nums[j]
+nums[k]
<
-nums[i]
)else}if
(nums[i]
>0)
break
;while
(i+1
2&& nums[i+1]
==nums[i]
) i++
;//避免連續取相同的a
}return ans;
}
leetcode 15 三數之和 c
題目 給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 思路 首先將陣...
LeetCode 15 三數之和 C
題目 給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例項 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 三層迴圈遍歷。...
LeetCode 15 三數之和
15.給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組 方法一,個人解法正確,但是效率太低,時間複雜度o n 3 時間超時,無法提交至leetcode public s...