LeetCode Q15 三數之和 雙指標法

2021-10-18 13:18:04 字數 1161 閱讀 6394

原題鏈結

比較直觀的方法就是使用三層迴圈巢狀來暴力迭代找出答案.

public

static list

>

threesum

(int

nums)}}

}return res;

}

不過太簡單~過不了,會超時.看了一下題解,知道了雙指標的方法.三層迴圈變兩層迴圈.

public

static list

>

threesum

(int

nums)

if(r

1&&nums[r]

==nums[r+1]

)if(nums[i]

+nums[l]

+nums[r]

>

0) r--

;else

if(nums[i]

+nums[l]

+nums[r]

<

0) l++

;else}}

return res;

}

首先對輸入陣列進行排序.然後第一層迴圈比較常規,逐個進行迭代.第二個層迴圈則是對第一層迴圈之後的數字進行迭代.並且是使用雙指標進行遍歷.雙指標指向剩餘數字的一頭一尾.如果三個數字相加》0,那麼左指標往右走,讓三數之和小一點,向0靠攏.如果三個數字相加<0,那麼右指標往左走,讓數字之和大一點.

public

static list

>

threesum

(int

nums)

if(r

1&&nums[r]

==nums[r+1]

)if(nums[i]

+nums[l]

+nums[r]

>

0) r--

;else

if(nums[i]

+nums[l]

+nums[r]

<

0) l++

;else}}

return res;

}

15 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 最首先想到的是來三層...

15 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。有兩種寫法 第一種耗時久,但容易解讀 class solution if nums.length 3 else if ...

15 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 分析排序 雙指標避免...