恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经,目前已更新至美团、微软… 作者@TechGuide【全网同名】 点赞再看,养成习惯,您动动手指对原创作者意义非凡🤝
第一题: 题目描述给定一个只包含小写字母字符串,每次可以选择两个相同的字符删除,并在字符串结尾新增任意一个小写字母。 请问最少多少次操作后,所有的字母都不相同?
字符串长度 2) { map[i - 'a'] -= 2; count--; res++; } } } if (count > 0) { for (int i = 0; i preEnd || inStart > inEnd) { res.add(null); return res; } int rootVal = preOrder.get(preStart); ArrayList indexs = new ArrayList(); for (int i = inStart; i List[TreeNode]: if not preOrder: return [None] ans = [] n = len(preOrder) for i in range(n): if inOrder[i] == preOrder[0]: for l in self.getBinaryTrees(preOrder[1:i + 1], inOrder[:i]): for r in self.getBinaryTrees(preOrder[i + 1:], inOrder[i + 1:]): node = TreeNode(preOrder[0]) node.left = l node.right = r ans.append(node) return ans # vx公众号关注TechGuide 实时题库 闪电速递 第三题: 题目描述
给定一棵二叉树,二叉树的每个结点只有0或2个孩子。
你需要对每个结点赋值一个正整数,使得每个结点的左右子树权值和相等。
你需要返回所有结点的最小权值和对1e9+7取模的结果。
二叉树结点个数不超过1e5。
输入描述
{0,0,0}
输出描述
3
题目case如图:
正常递归,因为两侧值相等,每次把左右子树小的值设置成大的值即可,然后本节点最小赋值为1。
不知道需不需要处理大数,反正Python不需要,其他语言可能需要注意一下long吧。
代码 Java版本public int getTreeSum(TreeNode tree) {
// write code here
return (int) (traverse(tree) % ((Math.pow(10, 9) + 7)));
}
long traverse(TreeNode root) {
if (root == null) return 0;
long leftVal = traverse(root.left);
long rightVal = traverse(root.right);
return 1 + Math.max(leftVal, rightVal) * 2;
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
// vx公众号关注TechGuide 实时题库 闪电速递
Python版本
class TechGuide:
def getTreeSum(self, tree: TreeNode) -> int:
def f(node):
return 0 if not node else max(f(node.left), f(node.right)) * 2 + 1
return f(tree) % 1000000007
# vx公众号关注TechGuide 实时题库 闪电速递