Leetcode 15 三數之和 C

2021-10-06 23:57:16 字數 959 閱讀 2324

給你乙個包含 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...