原題鏈結
比較直觀的方法就是使用三層迴圈巢狀來暴力迭代找出答案.
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 分析排序 雙指標避免...