腾讯音乐笔试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 吉林

相关推荐

给🐭🐭个面试机会...:我擦seed✌🏻
点赞 评论 收藏
分享
是腾讯的csig腾讯云,前天晚上九点突然打电话约面,激动的通宵学了一晚上,第二天状态很差改了今天(以后再也不通宵学习了)感觉自己浪费了面试官一个半小时单纯手写+场景,无八股无项目无算法,打击真的很大,全是在面试官提醒的情况下完成的,自己技术方面真的还是有待提高,实力匹配不上大厂和已经面试的两个公司完全不一样,很注重编码能力和解决问题的能力,然而我这两个方面都很薄弱,面试官人很好很耐心的等我写完题目,遇到瓶颈也会提醒我,写不出题也会很耐心的跟我讲解好感动,到最后面试结束还安慰我打算把下周最后一场面试面完之后就不面啦,如果能去实习还是很开心,但是最重要的还是好好努力提高技术以下是面经第一题//&nbsp;实现一个解析&nbsp;url&nbsp;参数的函数function&nbsp;parseUrl(urlStr)&nbsp;{//&nbsp;TODO}parseUrl('*********************************************');//&nbsp;返回&nbsp;{a:&nbsp;1,&nbsp;b:&nbsp;2,&nbsp;c:&nbsp;3}追问:在链接里见过什么部分?用&nbsp;hash&nbsp;路由的话放在哪第二题//&nbsp;考虑有一个异步任务要执行,返回&nbsp;Promise,这个任务可能会失败,请实现&nbsp;retry&nbsp;方法,返回新方法,可以在失败后自动重试指定的次数。/***&nbsp;异步任务重试*&nbsp;@param&nbsp;task&nbsp;要执行的异步任务*&nbsp;@param&nbsp;times&nbsp;需要重试的次数,默认为&nbsp;3&nbsp;次*/function&nbsp;retry(task,&nbsp;times&nbsp;=&nbsp;3)&nbsp;{//&nbsp;TODO:&nbsp;请实现}//&nbsp;---------------测试示例&nbsp;----------------//&nbsp;原方法const&nbsp;request&nbsp;=&nbsp;async&nbsp;(data)&nbsp;=&gt;&nbsp;{//&nbsp;模拟失败if&nbsp;(Math.random()&nbsp;&lt;&nbsp;0.7)&nbsp;{throw&nbsp;new&nbsp;Error('request&nbsp;failed');}const&nbsp;res&nbsp;=&nbsp;await&nbsp;fetch(&#39;https://jsonplaceholder.typicode.com/posts&#39;,&nbsp;{method:&nbsp;'POST',body:&nbsp;JSON.stringify(data),});return&nbsp;res.json();}//&nbsp;新的方法const&nbsp;requestWithRetry&nbsp;=&nbsp;retry(request);//&nbsp;使用async&nbsp;function&nbsp;run()&nbsp;{const&nbsp;res&nbsp;=&nbsp;await&nbsp;requestWithRetry({&nbsp;body:&nbsp;'content'&nbsp;});console.log(res);}run();第三题就是给&nbsp;retry&nbsp;函数添加类型注释,用到泛型第四题:在组件库中将&nbsp;Alert&nbsp;用&nbsp;api&nbsp;的形式实现(应该就是&nbsp;message&nbsp;这个组件)怎么渲染到一个浮层里而不是原地渲染出来
不知道怎么取名字_:技术这个东西,太杂了,而且要下功夫的
查看5道真题和解析
点赞 评论 收藏
分享
评论
24
35
分享

创作者周榜

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