Coverage for blog/dsa/leetcode/twosum/__init__.py: 73%

26 statements  

« prev     ^ index     » next       coverage.py v7.6.12, created at 2025-02-20 16:23 +0000

1import pytest 

2 

3 

4# start snippet solution_trivial 

5class SolutionTrivial: 

6 def twoSum(self, nums: list[int], target: int) -> list[int]: 

7 

8 n = len(nums) 

9 for k in range(n): 

10 for j in range(k + 1, n): 

11 if nums[k] + nums[j] == target: 

12 return [k, j] 

13 return [k, j] 

14 # end snippet solution_trivial 

15 

16 

17# start snippet solution 

18class Solution: 

19 def twoSum(self, nums: list[int], target: int) -> list[int]: 

20 

21 memo: dict[int, int] = dict() 

22 for k, num in enumerate(nums): 

23 

24 diff = target - num 

25 if num in memo: 

26 return [k, memo[num]] 

27 

28 memo[diff] = k 

29 

30 raise ValueError("No pair!") 

31 # end snippet solution 

32 

33 

34@pytest.fixture 

35def solution(): 

36 return Solution() 

37 

38 

39@pytest.mark.parametrize( 

40 "nums, target, answer", 

41 ( 

42 ([2, 7, 11, 15], 9, [0, 1]), 

43 ([3, 4, 2], 6, [1, 2]), 

44 ([3, 3], 6, [0, 1]), 

45 ), 

46) 

47def test_solution(solution: Solution, nums: list[int], target: int, answer: list[int]): 

48 got = solution.twoSum(nums, target) 

49 print(got) 

50 assert sorted(got) == sorted(answer)