1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import pytest
- def twoSum(nums, target):
- lens = len(nums)
- j=-1
- for i in range(lens):
- if (target - nums[i]) in nums:
- # 如果num2=num1,且nums中只出现了一次,说明找到是num1本身
- if (nums.count(target - nums[i]) == 1) & (target - nums[i] == nums[i]):
- continue
- else:
- # index(x,i+1)是从num1后的序列找num2
- j = nums.index(target - nums[i], i+1)
- break
- if j > 0:
- return [i, j]
- else:
- return []
- #
- # def twoSum(nums, target):
- # hashmap={}
- #enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
- # for ind,num in enumerate(nums):
- # hashmap[num] = ind
- # for i,num in enumerate(nums):
- # j = hashmap.get(target - num)
- # if j is not None and i!=j:
- # return [i,j]
- def test_case_1():
- res1 = twoSum([2, 3, 1, 5, 8], 6)
- expect1 = [2, 3]
- assert expect1 == res1
- @pytest.mark.parametrize(
- "arr, target, expect",
- [
- ([-2, 3, 1, 5, 8], -1, [0, 2]),
- ([2, 3, 1, 5, 8], 6, [2, 3])
- ]
- )
- def test_cases(arr, target, expect):
- assert twoSum(arr, target) == expect
- #
- # def test_case_2():
- # res2 = twoSum([-2, 3, 1, 5, 8], -1)
- # expect2 = [0, 2]
- # assert expect2 == res2
- #
- # res3 = twoSum([2, 1, 1, 5, 8], 2)
- # expect3 = [1, 2]
- # assert expect3 == res3
- #
- # res4 = twoSum([2, -1, 1, 5, 8], 0)
- # expect4 = [1, 2]
- # assert expect4 == res4
- #
- # res5 = twoSum([2, 0, 0, 1, -1], 0)
- # expect5 = [1, 2]
- # assert expect5 == res5
- #
- #
- #
|