LeetCode 15 三數之和 C

2021-10-02 17:59:45 字數 1550 閱讀 3927

題目:給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

例項:給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[[-1, 0, 1],

[-1, -1, 2]

]三層迴圈遍歷。時間複雜度o(n3)。其中一共問題就是如何去重。我這裡使用了set《vector《int》。很讓我驚訝,set居然也能對相同的vector去重。

vectorint>>

threesum

(vector<

int>

& nums)

size_t num = nums.

size()

; setint>> st;

for(size_t i =

0; i < num -

2; i++)}

}}for(

auto s : st)

return res;

}

之所以想到排序,是因為如果排下序,那都大於0的就不用考慮了,這樣減少了時間複雜發。

從頭開始,定乙個數,後面的用雙指標查詢,在查詢過程中如果遇到重複的數字直接跳過。用雙指標查詢這個套路經常出現。要注意。

vectorint>>

threesum

(vector<

int>

& nums)

sort

(nums.

begin()

, nums.

end())

;//快排 預設公升序

size_t i =

0; size_t j, k;

//兩個指標

for(

; i < nums.

size()

-2; i++)if

(i !=

0&& nums[i -1]

== nums[i]

)//如果兩個相鄰的相等的話,直接跳過

j = i +

1; k = nums.

size()

-1;while

(j < k)

else

if(nums[i]

+ nums[j]

+ nums[k]

>0)

else

; res.

push_back

(temp)

;while

(j < k && nums[j]

== nums[j +1]

) j++

; j++

;while

(j < k && nums[k]

== nums[k -1]

) k--

; k--;}

}}return res;

}

ac

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...