Skip to content

Commit 95b1b97

Browse files
committed
added new problems
1 parent f7f7d43 commit 95b1b97

File tree

9 files changed

+197
-0
lines changed

9 files changed

+197
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Solution:
2+
def exist(self, board: List[List[str]], word: str) -> bool:
3+
self.board = board
4+
self.word = word
5+
6+
for r in range(len(board)):
7+
for c in range(len(board[0])):
8+
if board[r][c] == word[0] and self.dfs(r, c, 0):
9+
return True
10+
11+
return False
12+
13+
def dfs(self, r, c, idx):
14+
if idx == len(self.word):
15+
return True
16+
17+
if self.isNotValid(r, c, idx):
18+
return False
19+
20+
current_char = self.board[r][c]
21+
self.board[r][c] = ''
22+
23+
hasWord = (self.dfs(r + 1, c, idx + 1) or
24+
self.dfs(r - 1, c, idx + 1) or
25+
self.dfs(r, c + 1, idx + 1) or
26+
self.dfs(r, c - 1, idx + 1))
27+
28+
self.board[r][c] = current_char
29+
return hasWord
30+
31+
def isNotValid(self, r, c, idx):
32+
return (r < 0 or
33+
r >= len(self.board) or
34+
c < 0 or
35+
c >= len(self.board[0]) or
36+
self.board[r][c] != self.word[idx])
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution:
2+
def sortColors(self, nums: List[int]) -> None:
3+
"""
4+
Do not return anything, modify nums in-place instead.
5+
"""
6+
low = 0
7+
high = len(nums) - 1
8+
i = 0
9+
10+
while i <= high:
11+
if nums[i] == 0:
12+
nums[i], nums[low] = nums[low], nums[i]
13+
i += 1
14+
low += 1
15+
elif nums[i] == 1:
16+
i += 1
17+
else:
18+
nums[i], nums[high] = nums[high], nums[i]
19+
high -= 1
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from heapq import *
2+
from collections import Counter
3+
4+
class Solution:
5+
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
6+
num_freq_map = Counter(nums)
7+
min_heap = []
8+
9+
for num, freq in num_freq_map.items():
10+
heappush(min_heap, (freq, num))
11+
if len(min_heap) > k:
12+
heappop(min_heap)
13+
14+
top_nums = []
15+
while min_heap:
16+
top_nums.append(heappop(min_heap)[1])
17+
18+
return top_nums
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from heapq import *
2+
3+
class Solution:
4+
def findKthLargest(self, nums: List[int], k: int) -> int:
5+
min_heap = []
6+
for i in range(k):
7+
heappush(min_heap, nums[i])
8+
9+
for i in range(k, len(nums)):
10+
if nums[i] > min_heap[0]:
11+
heappop(min_heap)
12+
heappush(min_heap, nums[i])
13+
14+
return min_heap[0]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def findPeakElement(self, nums: List[int]) -> int:
3+
l = 0
4+
r = len(nums) - 1
5+
6+
while l < r:
7+
mid = l + (r - l + 1) // 2
8+
9+
if nums[mid - 1] > nums[mid]:
10+
r = mid - 1
11+
else:
12+
l = mid
13+
14+
return l
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution:
2+
def searchRange(self, nums: List[int], target: int) -> List[int]:
3+
res = [-1, -1]
4+
5+
first = self.binarySearch(nums, target, True)
6+
last = self.binarySearch(nums, target, False)
7+
8+
res[0] = first
9+
res[1] = last
10+
11+
return res
12+
13+
def binarySearch(self, nums, target, first):
14+
l = 0
15+
r = len(nums) - 1
16+
idx = -1
17+
18+
while l <= r:
19+
m = l + (r - l) // 2
20+
num = nums[m]
21+
22+
if num < target:
23+
l = m + 1
24+
elif num > target:
25+
r = m - 1
26+
else:
27+
idx = m
28+
if first:
29+
r = m - 1
30+
else:
31+
l = m + 1
32+
33+
return idx
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution:
2+
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
3+
if len(intervals) <= 1: return intervals
4+
5+
intervals.sort(key=lambda interval: interval[0])
6+
res = []
7+
start = intervals[0][0]
8+
end = intervals[0][1]
9+
10+
for i in range(1, len(intervals)):
11+
interval = intervals[i]
12+
13+
if interval[0] <= end:
14+
end = max(end, interval[1])
15+
else:
16+
res.append([start, end])
17+
start = interval[0]
18+
end = interval[1]
19+
20+
res.append([start, end])
21+
return res
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution:
2+
def search(self, nums: List[int], target: int) -> int:
3+
l = 0
4+
r = len(nums) - 1
5+
6+
while l <= r:
7+
m = (l + r) // 2
8+
9+
if nums[m] == target:
10+
return m
11+
12+
if nums[l] <= nums[m]:
13+
if nums[l] <= target < nums[m]:
14+
r = m - 1
15+
else:
16+
l = m + 1
17+
else:
18+
if nums[m] < target <= nums[r]:
19+
l = m + 1
20+
else:
21+
r = m - 1
22+
23+
return -1
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution:
2+
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
3+
if not matrix: return False
4+
5+
n = len(matrix[0])
6+
r = len(matrix) - 1
7+
c = 0
8+
9+
while r >= 0 and c < n:
10+
num = matrix[r][c]
11+
if num == target:
12+
return True
13+
elif num > target:
14+
r = r - 1
15+
else:
16+
c = c + 1
17+
18+
return False
19+

0 commit comments

Comments
 (0)