題目描述:
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[ [-1, 0, 1],
[-1, -1, 2]
]
python**:
思路1:暴力解法
class
solution
:def
threesum
(self, nums)
: result =
n =len(nums)
for i in
range
(n):
tmp_num1 =
0-nums[i]
#tmp_num1與tmp_num2不能使用相同變數名
for j in
range
(i+1
, n)
: tmp_num2 = tmp_num1 - nums[j]
for k in
range
(j+1
, n)
:if nums[k]
== tmp_num2:
li =
[nums[i]
, nums[j]
, nums[k]
] li.sort(
)if li not
in result:
#去重return result
思路2:
class
solution
:def
threesum
(self, nums)
: nums.sort(
) res =
for i in
range
(len
(nums)-2
):if nums[i]
>0:
# 此時nums[i] + nums[j] + nums[k] > 0
break
if i >
0and nums[i]
== nums[i-1]
:# 去重
continue
j = i +
1 k =
len(nums)-1
while j < k:
s = nums[i]
+ nums[j]
+ nums[k]
if s >0:
# 減小s
k -=
1while nums[k]
== nums[k+1]
and j < k:
#去重 k -=
1elif s <0:
# 增大s
j +=
1while nums[j]
== nums[j-1]
and j < k:
#去重 j +=
1else
:[nums[i]
, nums[j]
, nums[k]])
#儲存 j +=
1 k -=
1while nums[k]
== nums[k+1]
and j < k:
#去重 k -=
1while nums[j]
== nums[j-1]
and j < k:
#去重 j +=
1return res
兩數之和,三數之和
兩數之和 方法一 暴力 throw new illegalargumentexception 時間複雜度 o n 2 空間複雜度 o 1 public int twosum int nums,int target throw newillegalargumentexception no twosum...
兩數之和 三數之和 四數之和
兩數之和意思就是 給你乙個陣列,從中找出兩個數字,讓他們的和等於乙個具體的target。找到所有這樣的兩個數。並且這兩個數字不能完全一樣。n數之和的意思是 給你乙個陣列,從中找出n個數字,讓他們的和等於乙個具體的target。找到所有這樣的n個數。並且這n個數字不能完全一樣。最基礎的,也是最關鍵的就...
兩數之和,三數之和,最接近的三數之和,四數之和
二數之和 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...