給你乙個包含 n個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
示例:給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[[-1, 0, 1],
[-1, -1, 2]
]需要三個指標:當前指標i,另外兩個指標left和right分別在當前指標右側的子陣列的兩端。通過left與right交替向中間移動,計算對於每個i指標所有滿足的nums[i] + nums[left] + nums[right] == 0 的[ i,left,right]組合,遍歷的過程中需要注意去除重複元素。
1class
solution(object):
2@staticmethod
3def
three_sum(nums):
4 n =len(nums)
5 res =6if
not nums or n <=3:
7return
8 nums.sort() #
公升序排序910
for i in range(n-2): #
最後兩個元素不需要遍歷
11if nums[i] >0:
12break
13if i > 0 and nums[i] == nums[i-1]: #
去除重複元素
14continue
15 left = i + 1
16 right = n - 1
17while left 18 s = nums[i] + nums[left] +nums[right]
19if s <0:
20 left += 1
21elif s >0:
22 right -= 1
23else:24
25 left += 1
26 right -= 1
27while left < right and nums[left] == nums[left-1]: #
去除重複元素
28 left += 1
29while left < right and nums[right] == nums[right + 1]: #
去除重複元素
30 right -= 1
31return
res32
33if
__name__ == '
__main__':
34 the_nums = [-1, 0, 1, 2, -1, -4]
35 s =solution()
36 result =s.three_sum(the_nums)
37print(result) #
[(-1, -1, 2), (-1, 0, 1)]
1 #include "pch.h
"2 #include 3 #include 4 #include 5
using
namespace
std;67
class
solution ; //
組成乙個vector
29res.push_back(tempres);
30 left += 1
;31 right -= 1;32
while (left < right && nums[left] == nums[left - 1
])33 left += 1;34
while (left < right && nums[right] == nums[right + 1
])35 right -= 1;36
}37}38
}39return
res;40}
41};
4243
intmain() ;
45solution s;
46for (auto ares : s.threesum(thenums)) //
列印二維vector
47for(int k = 0; k < ares.size(); k++)
48 cout << ares[k] << "
"; //
-1 -1 2 -1 0 1
49 }
兩數之和(Python and C 解法)
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所...
兩數之和,三數之和
兩數之和 方法一 暴力 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個數字不能完全一樣。最基礎的,也是最關鍵的就...