三數之和(Python and C 解法)

2022-08-24 19:39:14 字數 2551 閱讀 3599

給你乙個包含 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]組合,遍歷的過程中需要注意去除重複元素。

1

class

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個數字不能完全一樣。最基礎的,也是最關鍵的就...