腾讯音乐笔试ak代码

第一题卡了比较久,其实只要每次变成计数为双数的字母就好,因为aa和aaa都只需要一步就可以变成无重复
int minOperations(string str)
    {
        int cnt[300]={0};
        long long ans=0;
        for(auto &c:str)
        {
            cnt[c]++;
        }
        while(true)
        {
            int maxVal=INT_MIN, v=-1;
            for(int i='a';i<='z';i++)
            {
                if(maxVal<cnt[i])
                {
                    maxVal=cnt[i];
                    v=i;
                }
            }
            if(maxVal<=1)
                break;
            int u=-1;
            for(int i='a';i<='z';i++)
            {
                if(cnt[i]%2==0)
                {
                    u=i;
                    break;
                }
            }
            if(u==-1)
                u='a';
            cnt[v]-=2;
            cnt[u]++;
            ans++;
        }
        return ans;
    }

第二题先计算每个节点的高度(到叶节点的路径长度),每次只选高度较高的孩子遍历,因为左右孩子的权值和一定相等,所以树的权值和为较高的子树权值和*2+1
unordered_map<TreeNode*, int> levs;
    const int MOD=1e9+7;
    int getLev(TreeNode *root)
    {
        if(root==nullptr)
            return 0;
        if(!levs.count(root))
        {
            levs.insert(make_pair(root, 1+max(getLev(root->left), getLev(root->right))));
        }
        return levs[root];
    }
    int DFS(TreeNode *root)
    {
        if(!root->left && !root->right)
            return 1;
        int leftLev=levs[root->left], rightLev=levs[root->right];
        int maxChildSum=leftLev>rightLev?DFS(root->left):DFS(root->right);
        return (2*maxChildSum+1)%MOD;
    }
    int getTreeSum(TreeNode* tree)
    {
        getLev(tree);
        return DFS(tree);
    }

第三题会建树就可以写,枚举所有可能的情况,纯看代码功底了
vector<TreeNode*> createTree(vector<int>& preOrder, vector<int>& inOrder, int pl, int ph, int il, int ih)
    {
        if(pl>ph)
            return vector<TreeNode*>{nullptr};
        vector<TreeNode*> res;
        for(int idx=il;idx<=ih;idx++)
        {
            if(preOrder[pl]==inOrder[idx])
            {
                int leftNum=idx-il;
                auto leftChilds=createTree(preOrder, inOrder, pl+1, pl+leftNum,il,idx-1);
                auto rightChilds=createTree(preOrder, inOrder, pl+leftNum+1, ph,idx+1,ih);
                for(auto &leftChild:leftChilds)
                {
                    for(auto &rightChild:rightChilds)
                    {
                        auto p=new TreeNode(preOrder[pl]);
                        p->left=leftChild;
                        p->right=rightChild;
                        res.push_back(p);
                    }
                }
            }
        }
        return res;
    }
    vector<TreeNode*> getBinaryTrees(vector<int>& preOrder, vector<int>& inOrder)
    {
        int n=preOrder.size();
        return createTree(preOrder, inOrder, 0, n-1, 0, n-1);
    }



#腾讯音乐娱乐笔试##腾讯音乐2023秋招笔试心得体会#
全部评论
最后一题思路跟你一样,用例也过了,run出来0,不知道为啥
2 回复 分享
发布于 2022-09-08 20:47 四川
用例在哪哦
点赞 回复 分享
发布于 2022-09-14 22:53 重庆
《大淘宝技术-用户产品技术-交易》核心团队校招启动!HC多多,TL直连,提供简历修改,有答疑群。核心,速来!
点赞 回复 分享
发布于 2022-09-09 10:54 浙江
第二题有其他解法: const int max_int = 1e9 + 7; int getTreeSum(TreeNode *root) {      return func(root) % max_int;  }  long long func(TreeNode *root) {       if (!root->left)           return 1;       long long left = func(root->left);       long long right = func(root->right);       return (2 * max(left,right) + 1);  }
点赞 回复 分享
发布于 2022-09-08 21:18 上海
woc 你的第二题这么优雅吗 我后序遍历的 没便利明白
点赞 回复 分享
发布于 2022-09-08 21:05 广东
大佬牛逼
点赞 回复 分享
发布于 2022-09-08 20:59 辽宁
我建树那题这样写的为啥20啊
点赞 回复 分享
发布于 2022-09-08 20:55 广东
思路都一样,2,3题代码都基本一样,但是每道题都没a,可能细节上有小错误,状态太差了
点赞 回复 分享
发布于 2022-09-08 20:54 河南
大佬牛逼
点赞 回复 分享
发布于 2022-09-08 20:50 湖北
大佬牛逼
点赞 回复 分享
发布于 2022-09-08 20:48 吉林

相关推荐

10-13 12:53
已编辑
湖北工业大学 前端工程师
小海c:包装一下,第一个感觉是字节青训营的那个,后面那个是黑马的
点赞 评论 收藏
分享
10-19 10:28
已编辑
西南石油大学 后端工程师
团孝子已上线feeling:面了很多家公司,能感受到目前只有小公司+外包喜欢问八股。大厂虽然也问八股,但是是从实习、项目中进行提问,并且大厂会问很深,面试官也会对你的回答进行思考➕追问,所以准备大厂面试前一定要备好相关资料。对于算法,我做的是codetop前100+力扣hot100+力扣高频150,面试中实感hot100就足够,基本上只要是hot100就秒答。对于项目和八股,我做的也是烂大街的星球项目,八股则是看小林和问ai,自己也写了很多技术博客和画了很多思维导图,并且自己也尝试用嘴巴说出来,不只停留于纸面。运气也很重要,必须要让面试官/HR看到简历才行,所以建议投递时间是下午两点。tl:第一岗位9.9&nbsp;投递9.10&nbsp;一面(一面评价:最近见过最强的大三,结束五分钟后约二面,都晚上九点了不下班吗)9.11&nbsp;二面(三道算法a出两道,反问评价:经验不够等横向,我实习生要啥经验)9.21挂(实习时间过短+其他原因,想要一年实习的,为什么不招个正职)第二岗位10.10投递10.11约面(主管打电话,说看到我之前投递记录了想要我挂qa职进去干后端,同意)10.14&nbsp;一面(无八股,主动说确实很强,意愿很强)10.16&nbsp;oc其余,友邦,东软,东华,惠择,用友oc已拒京东测开一面挂(投后端被测开捞)腾讯测试已拒(投后端被测开捞)ps:表扬惠择的主管面,没怎么问技术(可能是一面面试官沟通过了),全程一起讲大道理,解答了心中很多疑惑,也告诉我以面试官角度来看怎么选候选人,如果可以下次一定选惠择
HeaoDng:美团好像可以触发一面通
点赞 评论 收藏
分享
评论
24
35
分享

创作者周榜

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