From 973fc9cac6913f3ea547ff514e7acb809bd4fa9f Mon Sep 17 00:00:00 2001 From: mihirs16 Date: Fri, 17 Feb 2023 12:25:26 +0000 Subject: [PATCH 1/6] added: minimum distance between bst nodes --- ...83 - minimum distance between bst nodes.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 14. Questions/leetcode 783 - minimum distance between bst nodes.py diff --git a/14. Questions/leetcode 783 - minimum distance between bst nodes.py b/14. Questions/leetcode 783 - minimum distance between bst nodes.py new file mode 100644 index 0000000..9129953 --- /dev/null +++ b/14. Questions/leetcode 783 - minimum distance between bst nodes.py @@ -0,0 +1,33 @@ +# minimum distance between bst nodes | leetcode 783 | https://leetcode.com/problems/minimum-distance-between-bst-nodes +# dfs; inorder; keep track of last traversed node and check against minimum difference + + +# Definition for a binary tree node. +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + + +class Solution: + def minDiffInBST(self, root: TreeNode) -> int: + stack = [] + curr = root + last = None + minDiff = float("inf") + while True: + if curr is not None: + stack.append(curr) + curr = curr.left + elif stack: + curr = stack.pop() + if last is not None: + minDiff = min(abs(last.val - curr.val), minDiff) + last = curr + curr = curr.right + else: + break + + return int(minDiff) + From d6a2ce6f5303057680bb079e1d96e619e79b3ffc Mon Sep 17 00:00:00 2001 From: mihirs16 Date: Sun, 19 Feb 2023 02:05:19 +0000 Subject: [PATCH 2/6] added: zigzag level order traversal --- ...code 103 - zigzag level order traversal.py | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 14. Questions/leetcode 103 - zigzag level order traversal.py diff --git a/14. Questions/leetcode 103 - zigzag level order traversal.py b/14. Questions/leetcode 103 - zigzag level order traversal.py new file mode 100644 index 0000000..59d42a8 --- /dev/null +++ b/14. Questions/leetcode 103 - zigzag level order traversal.py @@ -0,0 +1,37 @@ +# binary tree zigzag level order traversal | leetcode 103 | https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal +# use flag to keep track of reversed levels; O(n) because worst case is full level - n/2 elements + +# Definition for a binary tree node. +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + +class Solution: + def zigzagLevelOrder(self, root: TreeNode) -> list[list[int]]: + res = [] + tempQ = [] + zig = False + + # queue to track visits + tempQ.append(root) + LtempQ = len(tempQ) + + # keep iterating till: + # the track queue is empty + while LtempQ is not 0: + LtempQ = len(tempQ) + level = [] + for i in range(LtempQ): + node = tempQ.pop(0) # pop this node from queue (visited) + if node is not None: + level.append(node.val) # add this node to the level + tempQ.append(node.left) # add left child to queue (to visit) + tempQ.append(node.right) # add right child to queue (to visit) + + if len(level) is not 0: # add level and reverse if zig + res.append(reversed(level) if zig else level) + zig = not zig + + return res \ No newline at end of file From 0351f38ba32a54e2977c830df7c35ea4396f3802 Mon Sep 17 00:00:00 2001 From: mihirs16 Date: Mon, 20 Feb 2023 02:31:26 +0000 Subject: [PATCH 3/6] added: add to array form of integer --- ...code 989 - add to array form of integer.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 14. Questions/leetcode 989 - add to array form of integer.py diff --git a/14. Questions/leetcode 989 - add to array form of integer.py b/14. Questions/leetcode 989 - add to array form of integer.py new file mode 100644 index 0000000..6fbd9ef --- /dev/null +++ b/14. Questions/leetcode 989 - add to array form of integer.py @@ -0,0 +1,19 @@ +# add to array form of integer | leetcode 989 | https://leetcode.com/problems/add-to-array-form-of-integer + +class Solution: + def addToArrayForm(self, num: list[int], k: int) -> list[int]: + n = len(num) - 1 + carry = 0 + while k or carry: + k, digit = k // 10, k % 10 + each = carry + digit + if n < 0: + num.insert(0, each % 10) + else: + each = each + num[n] + num[n] = each % 10 + carry = each // 10 + n -= 1 + + return num + From 498ced1afee9510a2d05e95b4c2abb188808f597 Mon Sep 17 00:00:00 2001 From: mihirs16 Date: Thu, 23 Feb 2023 03:43:05 +0000 Subject: [PATCH 4/6] added: capacity to ship --- ...etcode 1011 - capacity to ship packages.py | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 14. Questions/leetcode 1011 - capacity to ship packages.py diff --git a/14. Questions/leetcode 1011 - capacity to ship packages.py b/14. Questions/leetcode 1011 - capacity to ship packages.py new file mode 100644 index 0000000..ad5e4da --- /dev/null +++ b/14. Questions/leetcode 1011 - capacity to ship packages.py @@ -0,0 +1,33 @@ +# capacity to ship packages within D days | leetcode 1011 | https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/ +# binary search on a range of min and max capacity required +# min capacity = max(weights) and max capacity = sum(weights) + +class Solution: + def shipWithinDays(self, weights: list[int], days: int) -> int: + low, high = max(weights), sum(weights) + res = high + + # check if days required for a capacity is less than D + def isPossible (capacity): + daysReq = 1 + window = capacity + for weight in weights: + if window - weight < 0: + window = capacity + daysReq += 1 + window -= weight + + return daysReq <= days + + # binary search on [min...max] + while low <= high: + mid = (high + low) // 2 + + if isPossible(mid): + res = min(res, mid) + high = mid - 1 + else: + low = mid + 1 + + return res + From 024523961802377266bf5bc7e5add1b670684ed1 Mon Sep 17 00:00:00 2001 From: mihirs16 Date: Thu, 23 Feb 2023 03:45:34 +0000 Subject: [PATCH 5/6] added: single element in sorted array --- ... 540 - single element in a sorted array.py | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 14. Questions/leetcode 540 - single element in a sorted array.py diff --git a/14. Questions/leetcode 540 - single element in a sorted array.py b/14. Questions/leetcode 540 - single element in a sorted array.py new file mode 100644 index 0000000..fe28feb --- /dev/null +++ b/14. Questions/leetcode 540 - single element in a sorted array.py @@ -0,0 +1,24 @@ +# single element in a sorted array | leetcode 540 | https://leetcode.com/problems/single-element-in-a-sorted-array/ +# binary search over sorted array; check if mid is even and mid is the first of the duplicates + +class Solution: + def singleNonDuplicate(self, nums: list[int]) -> int: + N = len(nums) + if N < 2: + return nums[0] + low, high, mid = 0, N, 0 + while low <= high: + mid = low + ((high - low) // 2) + + if mid == N - 1: + return nums[mid] + + if nums[mid] == nums[mid - 1] or nums[mid] == nums[mid + 1]: + if (mid % 2 == 0) == (nums[mid] == nums[mid + 1]): + low = mid + else: + high = mid + else: + return nums[mid] + + return nums[mid] \ No newline at end of file From 1f05618ac2a571bdf43cd28be1dd4f6c653a9939 Mon Sep 17 00:00:00 2001 From: mihirs16 Date: Thu, 23 Feb 2023 12:16:35 +0000 Subject: [PATCH 6/6] added: ipo --- 14. Questions/leetcode 502 - ipo.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 14. Questions/leetcode 502 - ipo.py diff --git a/14. Questions/leetcode 502 - ipo.py b/14. Questions/leetcode 502 - ipo.py new file mode 100644 index 0000000..e48b6e1 --- /dev/null +++ b/14. Questions/leetcode 502 - ipo.py @@ -0,0 +1,21 @@ +# IPO | leetcode 502 | https://leetcode.com/problems/ipo/ +# min-heap to track capital and max-heap to track profits + +import heapq + +class Solution: + def findMaximizedCapital(self, k: int, w: int, profits: list[int], capital: list[int]) -> int: + maxHeap = [] + minHeap = [(c, p) for c, p in zip(capital, profits)] + heapq.heapify(minHeap) + + for _ in range(k): + while minHeap and minHeap[0][0] <= w: + _, p = heapq.heappop(minHeap) + heapq.heappush(maxHeap, -1 * p) + if not maxHeap: + break + w += -1 * heapq.heappop(maxHeap) + + return w +