題目:給定乙個包含 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...