File tree

8 files changed

+176
-0
lines changed

8 files changed

+176
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def twoSum(self, numbers, target):
3+
l = 0
4+
r = len(numbers) - 1
5+
6+
while l < r:
7+
cur_sum = numbers[l] + numbers[r]
8+
9+
if cur_sum == target:
10+
return [l+1, r+1]
11+
elif cur_sum > target:
12+
r -= 1
13+
else:
14+
l += 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def removeDuplicates(self, nums):
3+
l = 0
4+
5+
for r in range(1, len(nums)):
6+
if nums[l] != nums[r]:
7+
l += 1
8+
nums[l] = nums[r]
9+
10+
return l + 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution:
2+
def sortedSquares(self, A):
3+
res = [0] * len(A)
4+
max_idx = len(res) - 1
5+
l = 0
6+
r = max_idx
7+
8+
while l <= r:
9+
num_l = A[l] ** 2
10+
num_r = A[r] ** 2
11+
12+
if num_l > num_r:
13+
res[max_idx] = num_l
14+
l += 1
15+
else:
16+
res[max_idx] = num_r
17+
r -= 1
18+
19+
max_idx -= 1
20+
21+
return res
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution:
2+
def threeSum(self, nums):
3+
triplets = []
4+
nums.sort()
5+
for i in range(len(nums)):
6+
if i > 0 and nums[i] == nums[i-1]:
7+
continue
8+
self.findPair(nums, -nums[i], i+1, triplets)
9+
return triplets
10+
11+
12+
def findPair(self, nums, target, l, triplets):
13+
r = len(nums) - 1
14+
15+
while l < r:
16+
cur_sum = nums[l] + nums[r]
17+
18+
if cur_sum == target:
19+
triplets.append([-target, nums[l], nums[r]])
20+
l += 1
21+
r -= 1
22+
while l < r and nums[l] == nums[l-1]:
23+
l += 1
24+
while l < r and nums[r] == nums[r+1]:
25+
r -= 1
26+
elif cur_sum > target:
27+
r -= 1
28+
else:
29+
l += 1
30+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution:
2+
def threeSumClosest(self, nums, target):
3+
nums.sort()
4+
smallest_diff = float('inf')
5+
6+
for i in range(len(nums)-2):
7+
l = i + 1
8+
r = len(nums) - 1
9+
while l < r:
10+
cur_sum = nums[i] + nums[l] + nums[r]
11+
cur_diff = target - cur_sum
12+
13+
if cur_diff == 0:
14+
return cur_sum
15+
elif cur_diff > 0:
16+
l += 1
17+
else:
18+
r -= 1
19+
20+
if abs(cur_diff) < abs(smallest_diff):
21+
smallest_diff = cur_diff
22+
23+
return target - smallest_diff
24+
25+
class Solution2:
26+
def threeSumClosest(self, nums, target):
27+
nums.sort()
28+
cur_closest_sum = nums[0] + nums[1] + nums[2]
29+
30+
for i in range(len(nums)-2):
31+
l = i + 1
32+
r = len(nums) - 1
33+
while l < r:
34+
cur_sum = nums[i] + nums[l] + nums[r]
35+
old_diff = abs(cur_closest_sum - target)
36+
new_diff = abs(cur_sum - target)
37+
38+
if new_diff < old_diff:
39+
cur_closest_sum = cur_sum
40+
41+
if cur_sum > target:
42+
r -= 1
43+
elif cur_sum < target:
44+
l += 1
45+
else:
46+
return cur_closest_sum
47+
48+
return cur_closest_sum
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def threeSumSmaller(self, nums, target):
3+
nums.sort()
4+
count = 0
5+
6+
for i in range(len(nums)-2):
7+
l = i + 1
8+
r = len(nums) - 1
9+
10+
while l < r:
11+
cur_sum = nums[i] + nums[l] + nums[r]
12+
if cur_sum >= target:
13+
r -= 1
14+
else:
15+
count += r - l
16+
l += 1
17+
18+
return count
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def numSubarrayProductLessThanK(self, nums, k):
3+
count = 0
4+
product = 1
5+
window_start = 0
6+
7+
for window_end in range(len(nums)):
8+
product *= nums[window_end]
9+
while window_start < window_end and product >= k:
10+
product /= nums[window_start]
11+
window_start += 1
12+
if product < k:
13+
count += window_end - window_start + 1
14+
15+
return count
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution:
2+
def sortColors(self, nums):
3+
"""
4+
Do not return anything, modify nums in-place instead.
5+
"""
6+
low = 0
7+
high = len(nums) - 1
8+
9+
i = 0
10+
while i < len(nums):
11+
if nums[i] == 0:
12+
nums[i], nums[low] = nums[low], nums[i]
13+
low += 1
14+
i += 1
15+
elif nums[i] == 2:
16+
nums[i], nums[high] = nums[high], nums[i]
17+
high -= 1
18+
else:
19+
i += 1
20+

0 commit comments

Comments
 (0)