diff --git a/binary-tree-maximum-path-sum/printjin-gmailcom.py b/binary-tree-maximum-path-sum/printjin-gmailcom.py new file mode 100644 index 000000000..7562574bc --- /dev/null +++ b/binary-tree-maximum-path-sum/printjin-gmailcom.py @@ -0,0 +1,12 @@ +class Solution: + def maxPathSum(self, root): + self.max_sum = float('-inf') + def dfs(node): + if not node: + return 0 + left = max(dfs(node.left), 0) + right = max(dfs(node.right), 0) + self.max_sum = max(self.max_sum, node.val + left + right) + return node.val + max(left, right) + dfs(root) + return self.max_sum diff --git a/graph-valid-tree/printjin-gmailcom.py b/graph-valid-tree/printjin-gmailcom.py new file mode 100644 index 000000000..8ae9d221a --- /dev/null +++ b/graph-valid-tree/printjin-gmailcom.py @@ -0,0 +1,16 @@ +class Solution: + def valid_tree(self, n, edges): + if len(edges) != n - 1: + return False + parent = [i for i in range(n)] + def find(x): + while parent[x] != x: + parent[x] = parent[parent[x]] + x = parent[x] + return x + for u, v in edges: + pu, pv = find(u), find(v) + if pu == pv: + return False + parent[pu] = pv + return True diff --git a/merge-intervals/printjin-gmailcom.py b/merge-intervals/printjin-gmailcom.py new file mode 100644 index 000000000..be5d8b9c5 --- /dev/null +++ b/merge-intervals/printjin-gmailcom.py @@ -0,0 +1,10 @@ +class Solution: + def merge(self, intervals): + intervals.sort(key=lambda x: x[0]) + merged = [] + for interval in intervals: + if not merged or merged[-1][1] < interval[0]: + merged.append(interval) + else: + merged[-1][1] = max(merged[-1][1], interval[1]) + return merged diff --git a/missing-number/printjin-gmailcom.py b/missing-number/printjin-gmailcom.py new file mode 100644 index 000000000..9128673d7 --- /dev/null +++ b/missing-number/printjin-gmailcom.py @@ -0,0 +1,6 @@ +class Solution: + def missingNumber(self, nums): + n = len(nums) + expected_sum = n * (n + 1) // 2 + actual_sum = sum(nums) + return expected_sum - actual_sum diff --git a/reorder-list/printjin-gmailcom.py b/reorder-list/printjin-gmailcom.py new file mode 100644 index 000000000..891fdfda1 --- /dev/null +++ b/reorder-list/printjin-gmailcom.py @@ -0,0 +1,18 @@ +class Solution: + def reorderList(self, head): + if not head: + return + nodes = [] + current = head + while current: + nodes.append(current) + current = current.next + i, j = 0, len(nodes) - 1 + while i < j: + nodes[i].next = nodes[j] + i += 1 + if i == j: + break + nodes[j].next = nodes[i] + j -= 1 + nodes[i].next = None