diff --git a/binary-tree-level-order-traversal/ppxyn1.py b/binary-tree-level-order-traversal/ppxyn1.py new file mode 100644 index 0000000000..ad58fc6175 --- /dev/null +++ b/binary-tree-level-order-traversal/ppxyn1.py @@ -0,0 +1,30 @@ +# 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 + + +# idea: BFS +# Time Complexity: O(n) +from collections import deque +class Solution: + def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: + ans = [] + q = deque([root]) + while q: + level = [] + for i in range(len(q)): + node = q.popleft() + if node: + level.append(node.val) + if node.left: + q.append(node.left) + if node.right: + q.append(node.right) + if level: + ans.append(level) + return ans + + diff --git a/counting-bits/ppxyn1.py b/counting-bits/ppxyn1.py new file mode 100644 index 0000000000..c163c5d001 --- /dev/null +++ b/counting-bits/ppxyn1.py @@ -0,0 +1,13 @@ +# idea : - +# Time Complexity : O(n log n) since counting? +class Solution: + def countBits(self, n: int) -> List[int]: + ans = [] + for i in range(n + 1): + ans.append(bin(i)[2:].count("1")) + return ans + +# TODO: O(n)? + + + diff --git a/house-robber-ii/ppxyn1.py b/house-robber-ii/ppxyn1.py new file mode 100644 index 0000000000..4873d10135 --- /dev/null +++ b/house-robber-ii/ppxyn1.py @@ -0,0 +1,27 @@ +# DP +# Time Complexity : O(n) +class Solution: + def rob(self, nums: List[int]) -> int: + if not nums: + return 0 + if len(nums) == 1: + return nums[0] + + # case 1: from start+1 to end + p1, p2 = 0, 0 + for n in nums[1:]: + val = max(p1 + n, p2) + p1 = p2 + p2 = val + case1 = p2 + + # case 2: from start to end-1 + p1, p2 = 0, 0 + for n in nums[:-1]: + val = max(p1 + n, p2) + p1 = p2 + p2 = val + case2 = p2 + + return max(case1, case2) +