leetcode三數之和 雙指標法

2022-02-02 07:13:23 字數 1255 閱讀 6442

題目:

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

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

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

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

[[-1, 0, 1],

[-1, -1, 2]

]解:這道題一開始的解法如下,講其分為查詢兩數之和的子問題,但測試用例再最後兩個用例上顯示超時

class

solution1 

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