腾讯音乐 9.8笔试

第一题:去除重复字符的最小操作次数:
第二题:从有重复数字的前序和中序遍历序列构造所有可能的二叉树
第三题:新平衡二叉树的最小权值和

class Solution:
    def getMinCount(self, str: str) -> int:
        n = len(str)
        dic = collections.Counter(str)
        ans = 0
        # 记录去除原始字符串中的重复元素的操作次数
        for value in dic.values():
            ans += value // 2
        # 剩下的字符串如果超过26个字母,则每多一个就需要一次操作
        ans += max(0, n - ans - 26)
        return ans

    def getBinaryTrees(self , preOrder: List[int], inOrder: List[int]) -> List[TreeNode]:
        # write code here
        if not preOrder or not inOrder:
            return [None]
        ans = []
        for i in range(len(inOrder)):
            if inOrder[i] == preOrder[0]:
                # 所有的左右子树组合得到所有可能的树
                for left in self.getBinaryTrees(preOrder[1:i + 1], inOrder[:i]):
                    for right in self.getBinaryTrees(preOrder[i + 1:], inOrder[i + 1:]):
                        root = TreeNode(preOrder[0])
                        root.left = left
                        root.right = right
                        ans.append(root)
        return ans
    
    def getValueSum(self, tree: TreeNode) -> int:
        # 返回以node为根节点的新平衡数的最小权值和
        def dfs(node):
            if not node:
                return 0
            if not node.left and not node.right:
                self.ans += 1
                self.ans %= mod
                return 1
            left = dfs(node.left)
            right = dfs(node.right)
            # 如果不平衡,那么左右子树中权值较小的子树的权值需补充abs(left - right)
            # 每次总是假设该节点的权值为1,所以需加1
            self.ans += abs(left - right) + 1
            self.ans %= mod
            # 返回该节点的最小权值之和
            return left + right + abs(left - right) + 1

        mod = int(1e9 + 7)
        self.ans = 0
        dfs(tree)
        return self.ans


#腾讯音乐##腾讯音乐娱乐笔试##腾讯音乐2023秋招笔试心得体会#
全部评论
第三题计算层数然后计算2的层数次方再减一就ac了
点赞 回复 分享
发布于 2022-09-08 21:11 陕西
第三个一样的思路只能过55
点赞 回复 分享
发布于 2022-09-08 21:09 北京
if not preOrder&nbs***bsp;not inOrder: 这一句没看懂
点赞 回复 分享
发布于 2022-09-08 21:27 广东
public class Solution {     public int process(TreeNode root){         if(root == null){              return 0;         }         int left = process(root.left);         int right = process(root.right);         if(left == right){              root.val = left +right + 1;         }         else{              root.val = left > right ?  2*left +1:2*right + 1;         }         return root.val % (10^9 + 7);     } } 大佬帮我看下第三题这么写有什么问题,把左右节点的值累加到root的值上,感觉思路上没问题,但只A了10%
点赞 回复 分享
发布于 2022-09-08 21:13 北京
第三题题解: class Solution:     def getTreeSum(self, tree: TreeNode) -> int:         def height(root):             if root is None:                 return 0             return max(height(root.left), height(root.right)) + 1         return (2 ** height(tree) - 1) % 1000000007
点赞 回复 分享
发布于 2022-09-08 21:11 四川
牛皮
点赞 回复 分享
发布于 2022-09-08 22:48 陕西
第一题太🐮了
点赞 回复 分享
发布于 2022-09-08 21:53 四川
人傻了 ,把递归调用放for循环里当条件,楼主🐮
点赞 回复 分享
发布于 2022-09-08 21:48 广东
前天刚做了一个用到counter的题,实在没想起来在哪个包
点赞 回复 分享
发布于 2022-09-08 21:13 广东

相关推荐

05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
评论
8
29
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务