swift演算法 三數之和

2021-09-23 10:35:32 字數 941 閱讀 2452

描述:

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

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

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

滿足要求的三元集合為:[[-1, 0, 1], [-1, -1, 2]]

一、暴力法

思路:陣列先從小到大的順序排序,然後遍歷陣列,取3個數判斷它們的和是否等於0,儲存組合是,判斷該組合是否儲存過,目的是去重

時間複雜度:o(n^3)

具體實現:

func threesum(_ nums: [int]) -> [[int]] 

let nums = nums.sorted

var array : [[int]]! = [[int]]()

for i in 0..二、雙指標法

思路:固定乙個值,找另外二個值它們和等於 0,這兩個數的尋找利用雙指標,左指標指向1,右指標指向最後乙個數,依次向中間遍歷

時間複雜度:o(nlog(n))

具體實現:

/*固定乙個值,找另外二個值它們和等於 0,

如何找另外兩個值,用的是雙指標!

*/func threesum(_ nums: [int]) -> [[int]]

let nums = nums.sorted

let len = nums.count

var array : [[int]] = [[int]]()

for i in 0..0 && nums[i] == nums[i-1]

var left = i+1

var right = len-1

while left < right else}}

return array

}

演算法 兩數之和,三數之和

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 leetcode 思路 兩層for迴圈時間複雜度是o ...

演算法 三數之和

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。參考 1.對原始陣列進行排序。2.對陣列進行遍歷並且構建左右雙指標。3.判定符合要求的條件。去重分析 當前和前乙個...

演算法 兩數之和,三數之和,四數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...