two_sum.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import pytest
  2. def twoSum(nums, target):
  3. lens = len(nums)
  4. j=-1
  5. for i in range(lens):
  6. if (target - nums[i]) in nums:
  7. # 如果num2=num1,且nums中只出现了一次,说明找到是num1本身
  8. if (nums.count(target - nums[i]) == 1) & (target - nums[i] == nums[i]):
  9. continue
  10. else:
  11. # index(x,i+1)是从num1后的序列找num2
  12. j = nums.index(target - nums[i], i+1)
  13. break
  14. if j > 0:
  15. return [i, j]
  16. else:
  17. return []
  18. #
  19. # def twoSum(nums, target):
  20. # hashmap={}
  21. #enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
  22. # for ind,num in enumerate(nums):
  23. # hashmap[num] = ind
  24. # for i,num in enumerate(nums):
  25. # j = hashmap.get(target - num)
  26. # if j is not None and i!=j:
  27. # return [i,j]
  28. def test_case_1():
  29. res1 = twoSum([2, 3, 1, 5, 8], 6)
  30. expect1 = [2, 3]
  31. assert expect1 == res1
  32. @pytest.mark.parametrize(
  33. "arr, target, expect",
  34. [
  35. ([-2, 3, 1, 5, 8], -1, [0, 2]),
  36. ([2, 3, 1, 5, 8], 6, [2, 3])
  37. ]
  38. )
  39. def test_cases(arr, target, expect):
  40. assert twoSum(arr, target) == expect
  41. #
  42. # def test_case_2():
  43. # res2 = twoSum([-2, 3, 1, 5, 8], -1)
  44. # expect2 = [0, 2]
  45. # assert expect2 == res2
  46. #
  47. # res3 = twoSum([2, 1, 1, 5, 8], 2)
  48. # expect3 = [1, 2]
  49. # assert expect3 == res3
  50. #
  51. # res4 = twoSum([2, -1, 1, 5, 8], 0)
  52. # expect4 = [1, 2]
  53. # assert expect4 == res4
  54. #
  55. # res5 = twoSum([2, 0, 0, 1, -1], 0)
  56. # expect5 = [1, 2]
  57. # assert expect5 == res5
  58. #
  59. #
  60. #