Skip to content

Commit 3e7481b

Browse files
authored
Merge pull request #1484 from ivan1016017/december13
adding algo
2 parents b548a56 + 59e5861 commit 3e7481b

File tree

4 files changed

+127
-0
lines changed

4 files changed

+127
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
4+
class Solution:
5+
def threeSum(self, nums: List[int]) -> List[List[int]]:
6+
7+
answer = list()
8+
positives = list()
9+
negatives = list()
10+
num_zeroes = 0
11+
12+
for num in nums:
13+
if num == 0:
14+
num_zeroes += 1
15+
elif num > 0:
16+
positives.append(num)
17+
else:
18+
negatives.append(num)
19+
20+
s_positives = set(positives)
21+
s_negatives = set(negatives)
22+
23+
for i in range(len(positives)):
24+
for j in range(i+1, len(positives)):
25+
k = positives[i] + positives[j]
26+
if -k in s_negatives:
27+
mi = min(positives[i], positives[j])
28+
ma = max(positives[i], positives[j])
29+
answer.append((-k,mi,ma))
30+
31+
for i in range(len(negatives)):
32+
for j in range(i+1, len(negatives)):
33+
k = negatives[i] + negatives[j]
34+
if -k in s_positives:
35+
mi = min(negatives[i], negatives[j])
36+
ma = max(negatives[i], negatives[j])
37+
answer.append((mi,ma,-k))
38+
39+
if num_zeroes >= 1:
40+
for num in s_positives:
41+
if -num in s_negatives:
42+
answer.append((-num,0,num))
43+
44+
if num_zeroes >= 3:
45+
answer.append((0,0,0))
46+
47+
return list(set(answer))
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
import math
4+
5+
class Solution:
6+
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
7+
8+
window_start = 0
9+
min_size = float('inf')
10+
11+
# summation of subarray
12+
sum_subarray = 0
13+
14+
# use sliding windows to update min_size of valid subarray
15+
16+
for window_end, num in enumerate(nums):
17+
18+
sum_subarray += num
19+
20+
while sum_subarray >= target:
21+
22+
# keep shrinking window size if sum_subarray is valid
23+
min_size = min(min_size, window_end-window_start+1)
24+
25+
# update sum_subarray
26+
sum_subarray -= nums[window_start]
27+
window_start += 1
28+
29+
if min_size == float('inf'):
30+
return 0
31+
else:
32+
return min_size
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import unittest
2+
from src.my_project.interviews.top_150_questions_round_22\
3+
.ex_29_3sum import Solution
4+
5+
class ThreeSumTestCase(unittest.TestCase):
6+
7+
def test_first_pattern(self):
8+
solution = Solution()
9+
output = solution.threeSum(nums = [-1,0,1,2,-1,-4])
10+
target = [(-1,-1,2),(-1,0,1)]
11+
output.sort()
12+
target.sort()
13+
self.assertEqual(output, target)
14+
15+
def test_second_pattern(self):
16+
solution = Solution()
17+
output = solution.threeSum(nums = [0,1,1])
18+
target = []
19+
self.assertEqual(output, target)
20+
21+
def test_third_pattern(self):
22+
solution = Solution()
23+
output = solution.threeSum(nums = [0,0,0])
24+
target = [(0,0,0)]
25+
self.assertEqual(output, target)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import unittest
2+
from src.my_project.interviews.top_150_questions_round_22\
3+
.ex_30_minimum_size_subarray_sum import Solution
4+
5+
class MinimumSizeSubarraySumTestCase(unittest.TestCase):
6+
7+
def test_first_pattern(self):
8+
solution = Solution()
9+
output = solution.minSubArrayLen(target = 7, nums = [2,3,1,2,4,3])
10+
target = 2
11+
self.assertEqual(output, target)
12+
13+
def test_second_pattern(self):
14+
solution = Solution()
15+
output = solution.minSubArrayLen(target = 4, nums = [1,4,4])
16+
target = 1
17+
self.assertEqual(output, target)
18+
19+
def test_third_pattern(self):
20+
solution = Solution()
21+
output = solution.minSubArrayLen(target = 11, nums = [1,1,1,1,1,1,1,1])
22+
target = 0
23+
self.assertEqual(output, target)

0 commit comments

Comments
 (0)