題目:
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
示例:給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[[-1, 0, 1],
[-1, -1, 2]
]解:這道題一開始的解法如下,講其分為查詢兩數之和的子問題,但測試用例再最後兩個用例上顯示超時
classsolution1
for (;i2;i++)
}tmp_map[nums[j]]=j;}}
return
v2;}
};
測試可得unordered_map的時間比map快一倍,unordered_map為4s,map為7s。且將tmp_map[nums[j]]=j;這行注釋後,時間縮短為1s可得插入時間比較費時
以上的時間複雜度計算為o(n2),但未計算map插入的時間複雜度,可能應該為o(n2*logn)
下面為雙指標方法,時間複雜度o(n2),所有測試用例通過
class關於雙指標方法,雙指標的使用 一般要先進行排序solution
for (;i)
if(i>0&&nums[i-1]==nums[i])
int i_left=i+1
;
int i_right=nums.size()-1
;
while(i_left
));//尋找接下來滿足條件的
//首先跳過重複的
while(i_left1
]) i_left++;
while(i_left1
]) i_right--;
i_left++;
i_right--;
}else
if(nums[i]+nums[i_left]+nums[i_right]>0
)
else
i_left++;}}
return
v2;}
};
下面是別人對其進行的總結
leetcode三數之和 雙指標
題目描述 給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 題目分...
三數之和(雙指標)
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 分析 題目要求 a ...
Leetcode15 三數之和(雙指標)
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 給定乙個包含 n 個...