快手工程类b卷前两题ac代码,第三题没写出来求大佬教育
Python解法
1.奖金
# -*- coding=utf-8 -*- class Solution(): def get_most_money(self, n, nums): if n < 2: return 0 low, high, max_money = 0, n-1, 0 sum_low, sum_high = nums[low], nums[high] while low < high: if sum_low == sum_high: max_money = max(sum_low, max_money) low += 1 high -= 1 sum_low += nums[low] sum_high += nums[high] elif sum_low < sum_high: low += 1 sum_low += nums[low] else: high -= 1 sum_high += nums[high] return max_money if __name__ == "__main__": n = int(input()) nums = list(map(int, input().split())) ex = Solution() print(ex.get_most_money(n, nums))
2. 求和树
# -*- coding=utf-8 -*- class TreeNode(): def __init__(self, val): self.val = val self.left = None self.right = None class Solution(): def recreate_tree(self, pre_order, mid_order): if len(pre_order) != len(mid_order): return None if not pre_order or not mid_order: return None root_val = pre_order[0] root = TreeNode(root_val) root_index = mid_order.index(root_val) left_pre = pre_order[1:root_index+1] left_mid = mid_order[:root_index] right_pre = pre_order[root_index+1:] right_mid = mid_order[root_index+1:] root.left = self.recreate_tree(left_pre, left_mid) root.right = self.recreate_tree(right_pre, right_mid) return root def sum_tree(self, root): if not root.left and not root.right: temp = root.val # 将自己设置成左右子树的和 root.val = 0 return temp res = 0 if root.left: res += self.sum_tree(root.left) if root.right: res += self.sum_tree(root.right) temp = root.val root.val = res res += temp return res def morris_tranverse(self, root): if root is None: return None cur = root while cur: most_right = cur.left if most_right: while most_right.right and most_right.right != cur: most_right = most_right.right if most_right.right is None: # 第一次访问到cur节点 most_right.right = cur cur = cur.left elif most_right.right == cur: # 第二次来到cur节点 print(cur.val, end=' ') most_right.right = None cur = cur.right else: print(cur.val, end=' ') cur = cur.right print('') if __name__ == "__main__": pre_order = list(map(int, input().split())) mid_order = list(map(int, input().split())) ex = Solution() root = ex.recreate_tree(pre_order, mid_order) ex.sum_tree(root) ex.morris_tranverse(root)
#快手#