Skip to content

Commit 5180148

Browse files
authored
Add files via upload
1 parent 374ca27 commit 5180148

29 files changed

+499
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution:
2+
def isBalanced(self, root: Optional[TreeNode]) -> bool:
3+
balanced = [True]
4+
5+
def height(root):
6+
if not root:
7+
return 0
8+
9+
left_height = height(root.left)
10+
if balanced[0] is False:
11+
return 0
12+
13+
14+
right_height = height(root.right)
15+
if abs(left_height - right_height) > 1:
16+
balanced[0] = False
17+
return 0
18+
return 1 + max(left_height, right_height)
19+
20+
height(root)
21+
return balanced[0]

Binary Search - Leetcode 704.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def search(self, nums: List[int], target: int) -> int:
3+
left = 0
4+
right = len(nums) - 1
5+
6+
while left <= right:
7+
middle = (right + left) // 2
8+
9+
if nums[middle] == target:
10+
return middle
11+
elif nums[middle] > target:
12+
right = middle - 1
13+
else:
14+
left = middle + 1
15+
16+
return -1
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution:
2+
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
3+
if root is None:
4+
return None
5+
6+
queue = deque()
7+
queue.append(root)
8+
ans = []
9+
10+
while queue:
11+
level = []
12+
n = len(queue)
13+
for i in range(n):
14+
node = queue.popleft()
15+
level.append(node.val)
16+
17+
if node.left: queue.append(node.left)
18+
if node.right: queue.append(node.right)
19+
20+
ans.append(level)
21+
22+
return ans
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution:
2+
def copyRandomList(self, head: "Optional [Node]") -> "Optional [Node]":
3+
if not head:
4+
return None
5+
6+
curr = head
7+
old_to_new = {}
8+
9+
while curr:
10+
node = Node(x=curr.val)
11+
old_to_new[curr] = node
12+
curr = curr.next
13+
14+
curr = head
15+
16+
while curr:
17+
new_node = old_to_new[curr]
18+
new_node.next = old_to_new[curr.next] if curr.next else None
19+
new_node.random = old_to_new[curr.random] if curr.random else None
20+
curr = curr.next
21+
22+
return old_to_new[head]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution:
2+
def goodNodes(self, root: TreeNode) -> int:
3+
good_nodes = 0
4+
stk = [(root, float("-inf"))]
5+
6+
while stk:
7+
node, largest = stk.pop()
8+
9+
if largest <= node.val:
10+
good_nodes += 1
11+
12+
largest = max(largest, node.val)
13+
if node.right: stk.append((node.right, largest))
14+
if node.left: stk.append((node.left, largest))
15+
16+
return good_nodes
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution:
2+
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
3+
largest_diameter = [0]
4+
5+
def height(root):
6+
if root is None:
7+
return 0
8+
9+
left_height = height(root.left)
10+
right_height = height(root.right)
11+
diameter = left_height + right_height
12+
13+
largest_diameter[0] = max(largest_diameter[0], diameter)
14+
15+
return 1 + max(left_height, right_height)
16+
17+
height(root)
18+
return largest_diameter[0]
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution:
2+
def findMin(self, nums: List[int]) -> int:
3+
n = len(nums)
4+
l = 0
5+
r = n - 1
6+
7+
while l < r:
8+
m = (l + r) // 2
9+
10+
if nums[m] > nums[r]:
11+
l = m + 1
12+
else:
13+
r = m
14+
15+
return nums[l]
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution:
2+
def insertGreatestCommonDivisors(self, head: Optional[ListNode]) -> Optional[ListNode]:
3+
prev = head
4+
cur = head.next
5+
6+
while cur:
7+
gcd = math.gcd(cur.val, prev.val)
8+
g = ListNode(gcd)
9+
prev.next = g
10+
g.next = cur
11+
prev = cur
12+
cur = cur.next
13+
return head

Invert Binary Tree - Leetcode 226.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
3+
4+
if not root:
5+
return None
6+
7+
root.left, root.right = root.right, root.left
8+
9+
self.invertTree(root.left)
10+
self.invertTree(root.right)
11+
12+
return root
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution:
2+
def kClosest(self, points: List[List[int]], k: int) -> List[List[int]]:
3+
def dist(x, y):
4+
return x**2 + y**2
5+
6+
heap = []
7+
for x, y in points:
8+
d = dist(x, y)
9+
if len(heap) < k:
10+
heapq.heappush(heap, (-d, x, y))
11+
else:
12+
heapq.heappushpop(heap, (-d, x, y))
13+
14+
return [(x, y) for d, x, y in heap]

0 commit comments

Comments
 (0)