腾讯音乐9.8笔试

1道问答题(10分)+3道编程题(3*30分)
问答题:设计一个直播间,完全不会
编程题:1+0+1
1.给定只包含小写字母的字符串,每次可以选择两个相同的字符进行消除,然后再末尾加上一个任意小写字母。问最少多少次操作可以使字符串内各字符都不同?
解法:贪心。肯定优先加上没出现的字符。如果都满了,那就都放在同一字符上消除。具体来说,先进行一遍消除,使得26个位置尽可能满。如果剩余字符超过26,对多余处进行消除。

2.给定 前序遍历数组,中序遍历数组。数组中可能存在重复元素,请给出所有可能二叉树。
考试的时候没写出来,下面是看到别人分享的代码。自己还是太菜了
public ArrayList<TreeNode> getBinaryTrees(ArrayList<Integer> preOrder, ArrayList<Integer> inOrder) {
    int n = preOrder.size();
    return createTree(preOrder, inOrder, 0, n - 1, 0, n - 1);
}

private ArrayList<TreeNode> createTree(ArrayList<Integer> preOrder, ArrayList<Integer> inOrder, int pl, int ph, int il, int ih) {
    if (pl > ph) {
        return new ArrayList<>();
    }
    ArrayList<TreeNode> res = new ArrayList<>();
    for (int i = il; i <= ih; i++) {
        if (preOrder.get(pl).equals(inOrder.get(i))) {
            int leftNum = i - il;
            ArrayList<TreeNode> leftChildes = createTree(preOrder, inOrder, pl + 1, pl + leftNum, il, i- 1);
            ArrayList<TreeNode> rightChildes = createTree(preOrder, inOrder, pl + leftNum + 1, ph, i + 1, ih);
            for (TreeNode leftChild : leftChildes) {
                for (TreeNode rightChild : rightChildes) {
                    TreeNode p = new TreeNode(preOrder.get(pl));
                    p.left = leftChild;
                    p.right = rightChild;
                    res.add(p);
                }
            }
        }
    }
    return res;
}

3. 给定某二叉树,其节点要么没有子节点,要么就是两个子节点。给每个节点赋正整数的值,使得一个节点,它的左右两边节点和相等。求最小的节点总和。
解法:后序遍历,return Math.max(left, right) + 1。尽可能赋最小的1.
#腾讯音乐娱乐笔试#
全部评论
感谢分享,研究一下
点赞 回复 分享
发布于 2022-10-17 22:13 陕西

相关推荐

07-17 11:56
门头沟学院 Java
感谢东子的收留
熬夜脱发码农:无敌了,这是我看到第二个京东的提前批大佬了我还在畏畏缩缩准备八股算法
点赞 评论 收藏
分享
Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

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