腾讯音乐娱乐集团2023校园招聘技术类岗位编程题合集

news2024/11/16 0:04:21

字符串操作 

题解:先变为没出现过的字符,然后在正常的变换

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 返回满足题意的最小操作数
     * @param str string字符串 给定字符串
     * @return int整型
     */
    int minOperations(string str) {
        // write code here
        map<int,int>mp;
        for(int i=0;i<str.length();i++){
            mp[str[i]]++;
        }
        int num=0;
        int res=0;
        for(int i=0;i<26;i++)
        {
            if(!mp[i+97])
            {
                num++;
            }
        }
        for(int i=0;i<26;i++)
        {
            if(mp[i+97]>1)
            {
                if(mp[i+97]==2)
                {
                      res++;
                }
                else{
                    int x=mp[i+97];
                    if(x%2==1)
                    {
                        int w=x/2;
                        if(w<num)
                        {
                            num-=w;
                            res+=w;
                        }
                        else{
                            res+=num;
                            res+=(x-2*num-1);
                            num=0;
                        }
                    }
                    else{
                        int w=x/2;
                        if(w<num)
                        {
                            num-=w;
                            num++;
                            res+=w;
                        }
                        else{
                            res+=num;
                            res+=(x-2*num-1);
                            num=0;
                        }
                         
                    }
                }

            }
        }
        return res;
    }
};

2.

带重复节点的前序中序二叉树

递归求解,前序遍历的第一个节点将中序遍历分为左右子树

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param preOrder int整型vector 
     * @param inOrder int整型vector 
     * @return TreeNode类vector
     */
    vector<TreeNode*>res;
    vector<TreeNode*> dfs(vector<int>& preOrder,vector<int>& inOrder,int L1,int R1,int L2,int R2){
        
        vector<TreeNode*> res;
        if(L1>R1){
            res.push_back(nullptr);
            return res;
        }
        int k=preOrder[L1];
        for(int i=L2;i<=R2;i++){
            int l=i-L2;
            if(inOrder[i]==k)
            {
                 vector<TreeNode*> left=dfs(preOrder,inOrder,L1+1,L1+l,L2,i-1);
                 vector<TreeNode*> right=dfs(preOrder,inOrder,L1+1+l,R1,i+1,R2);
                 for(TreeNode* le:left){
                    for(TreeNode* ri:right){
                        TreeNode* s=new TreeNode(k);
                        // s->val=k;
                        s->left=le;
                        s->right=ri;
                        res.push_back(s);
                    }
                 }
            }
        }

        return res;
    }
    vector<TreeNode*> getBinaryTrees(vector<int>& preOrder, vector<int>& inOrder) {
        // write code here
        int pL=preOrder.size();
        int iL=inOrder.size();
        return dfs(preOrder,inOrder,0,pL-1,0,iL-1);

         
    }
};

 

 

3.嘤嘤的新平衡树

刚开始用递归写的用的最小最大那种方法,因为中间取mod了所以答案不会对,最后参考网上答案发现用满二叉树这个性质。

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param tree TreeNode类 
     * @return int整型
     */
     int mod=1e9+7;
     long long dfs(TreeNode* tree){
        long long res=1;
        if(tree==nullptr) return 0; 
        if(tree->left==nullptr && tree->right==nullptr){
                return 1;
        }
        else{
            res+= max(dfs(tree->left),dfs(tree->right));
        }
        return res;
     }
    int getTreeSum(TreeNode* tree) {

        int n=dfs(tree);
        int res=1;
        for(int i=1;i<=n;i++)
        {
             res=res*2%mod;
        }
        return res-1;
    }
};

01串修改

先0变1

在1变0

取两者之间操作的最小值

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @return int整型
     */
    int minOperations(string str) {
        // write code here
        int n=str.length();
        if(n==1) return 0;
        //0变1
        //同时更改两个0优先
        int num1=0;
        for(int i=0;i<=n-1;i++)
        {
            if(str[i]=='0'){
                i++;
                num1++;
            }
            // else if(str[i]=='0')
            // {
            //     num1++;
            //     i++;
            // }
        }
        int num2=0;
         for(int i=0;i<=n-1;i++)
        {
            if(str[i]=='1'){
                i++;
                num2++;
            }
            // else if(str[i]=='1')
            // {
            //     num2++;
            //     i++;
            // }
        }
        //1变0
        return min(num1,num2);
    }
};

 

 

5.连续子数组数量

双端滑动窗口(技巧需要计算一下在某个区间范围内的2的个数和5的个数,取最小值,即是后缀0的个个数)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param a int整型vector 
     * @param x int整型 
     * @return int整型
     */
     //滑动窗口
    int getSubarrayNum(vector<int>& a, int x) {
        // write code here
        int n=a.size();
        vector<int>num5(n+1,0);
        vector<int>num2(n+1,0);
        int res=0;
        int mod=1e9+7;
        for(int i=0;i<n;i++){
            int m=a[i];
            while(m){
                int t=0;
                while(m%5==0&&m!=0)
                {
                    m=m/5;
                    num5[i]++;
                    t++;
                }
                while(m%2==0&&m!=0){
                    m=m/2;
                    num2[i]++;
                    t++;
                }
                break;
            }
            if(i!=0){
            num2[i]+=num2[i-1];
            num5[i]+=num5[i-1];
            }   
        }
        int l=0;
         
        for(int i=0;i<n;i++){
            int x2;
            int x5;
            if(l==0)
            {
                x2=num2[i];
                x5=num5[i];
            }
            else{
                x2=num2[i]-num2[l-1];
                x5=num5[i]-num5[l-1];
            }
            int k=min(x2,x5);
            
            if(k>=x){
                res+=(n-i);
                res=res%mod;
                int L1=l;
                while(l<=i && k>=x){
                    l++;
                    x2=num2[i]-num2[l-1];
                    x5=num5[i]-num5[l-1];
                    k=min(x2,x5);
                }
                 res+=(l-L1-1)*(n-i)%mod;
            }
             
        }
        return res;
      
    }
};

 

6.好矩阵

不会(搜的答案是先确定第一行和第一列然后其他就奇偶性就确定了)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @param m int整型 
     * @param x int整型 
     * @return int整型
     */
    //  int mod = 1e9 + 7;
 
	// /*
	// * 封装的快速幂
	// */
	// int power(int a, long long b) {
	// 	int res = 1;
	// 	while (b) {
	// 		if (b & 1)res = 1LL * res * a % mod;
	// 		b >>= 1;
	// 		a = 1LL * a * a % mod;
	// 	}
	// 	return res;
	// }
 
    // int numsOfGoodMatrix(int n, int m, int x) {
	// 	return 1LL * power(x, n + m - 1) * power(x / 2, 1LL * (n - 1) * (m - 1)) % mod;
    // }
    int mod=1e9+7;
    int ksm(int x,long long h){
        long long res=1;
        while(h>0){
            if(h&1){
                res=res*x;
                res=res%mod;
                // cout<<res<<endl;
            }
            
            x=1LL*x*x%mod;
            h>>=1;
        }
        return res%mod;
    }
    int numsOfGoodMatrix(int n, int m, int x) {
        // write code here
        //快速幂
     
        return 1LL*ksm(x,m+n-1)*ksm(x/2,1LL*(m-1)*(n-1))%mod;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/739417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python绘制直方图

文章目录 初步参数绘图类型多组数据直方图对比 初步 对于大量样本来说&#xff0c;如果想快速获知其分布特征&#xff0c;最方便的可视化方案就是直方图&#xff0c;即统计落入不同区间中的样本个数。 以正态分布为例 import numpy as np import matplotlib.pyplot as pltxs…

用c++实现大小端序互转(字符串方法)

今天在逆一个RC4加密算法&#xff0c;忘了IDA如何自动将大小端序互转的按键&#xff0c;索性自己写了一个&#xff0c;因为是用字符串方法&#xff0c;所以理论上长度是管够的 #include <iostream> #include <string> using namespace std; int main() {string m_…

macOS 14 Sonoma Beta 测试版体验,不影响主力系统

今年的 WWDC 上 Apple 依旧保持往年的发布节奏&#xff0c;公布了今年的 macOS 新版本&#xff1a;macOS Sonoma&#xff0c;不过和以往有些不太一样的是&#xff0c;这一次 Apple 将测试版系统直接下发给了普通开发者账户&#xff0c;对于一般用户简单注册就可以直接获得 macO…

Windows VScode如何配置与使用git?

当我们在VScode中编写代码后&#xff0c;需要提交到git仓库时&#xff0c;但是我们又不想切换到git的命令行窗口&#xff0c;我们可以在VScode中配置git&#xff0c;然后就可以很方便快捷的把代码提交到仓库中。 1. 官网下载安装Git命令行工具 根据自己的电脑系统&#xff0c…

分布式ELK日志文件分析系统(曾经沧海难为水,除却巫山不是云)

文章目录 一、ELK 概述1. 为什么要使用 ELK2. 完整日志系统基本特征3. ELK 简介3.1 ElasticSearch&#xff08;ES&#xff09;3.2 Kiabana3.3 Logstash3.4 其它组件Filebeat缓存/消息队列Fluentd 4. ELK 的工作原理5. Linux 系统内核日志消息的优先级别 二、 部署 ELK 集群服务…

基于matlab检测交通视频中的汽车(附源码)

一、前言 此示例说明如何使用工具箱可视化和分析视频或图像序列。此示例来检测交通视频中的浅色汽车。请注意&#xff0c;VideoReader 的有些功能特定于平台&#xff0c;可能无法在某些平台上读取提供的 Motion JPEG2000 视频。 二、步骤 步骤 1&#xff1a;使用 VideoReade…

用IDEA写第一个Spring程序 HelloWorld

用IDEA写第一个Spring程序 HelloWorld 环境 Orcal JDK&#xff1a;1.8.0_341 maven&#xff1a;3.9.3 Spring&#xff1a;5.3.10 IDEA&#xff1a;2023.1.2 1. 安装JDK和IDEA 2. 安装maven并配置环境变量、换源 3. IDEA中maven属性配置&#xff0c;主要是版本和settings文件及…

React 新版官方文档 (一) useReducer 用法详解

useReducer useReducer 是一个可以让你向组件中添加 reducer 的 Hook const [state, dispatch] useReducer(reducer, initialArg, init?)基本用法 const reducer (state, action) > { ... } const MyComponent () > {const [state, dispatch] useReducer(reducer…

820. 递归求斐波那契数列

链接&#xff1a; 原题 题目&#xff1a; 请使用递归的方式求斐波那契数列的第 nn 项&#xff0c;下标从1开始。 斐波那契数列&#xff1a;1,1,2,3,5…1,1,2,3,5…&#xff0c;这个数列从第 33 项开始&#xff0c;每一项都等于前两项之和 输入格式 共一行&#xff0c;包含整数 …

npm 包和模块简介

目录 1、关于公共npm注册表 2、关于包和模块 2.1、关于包 2.2、关于包格式 2.3、npm包git URL格式 2.4、关于模块 3、关于范围 3.1、作用域和包的可见性 4、关于公共软件包 5、关于私有包 6、npm包范围、访问级别和可见性 1、关于公共npm注册表 公共npm注册表是Jav…

学习单片机的三个步骤:基础知识、编程语言和实践项目

当然&#xff01;学习单片机的过程可以分为以下三个步骤&#xff1a; 学习基础知识&#xff1a;在开始学习单片机之前&#xff0c;首先需要掌握一些基础知识。了解数字电子学和模拟电子学的基本原理是很重要的&#xff0c;包括数字和模拟信号、逻辑门、计数器、寄存器等。还需…

K8S应用安全检测(调用分析 容器健康 审计日志)

应用安全检测 1 应用安全检测1.1 调用分析1.1.1 sysdig基础1.1.2 命令实践 1.2 容器监控1.2.1 CAdvisor1.2.2 Falco基础1.2.3 Falco实践1.2.4 进阶实践1.2.5 可视化实践 1.3 审计日志1.3.1 日志解读1.3.2 审计日志 1 应用安全检测 1.1 调用分析 1.1.1 sysdig基础 学习目标 …

第六章 mac上用的软件

1、brew.sh/index_zh-cn 2、网易有道词典 3、SizeUP 4、 5、chrome浏览器插件 6、快捷键

最近,智慧公厕空位引导系统非常受园区、写字楼、工厂、大型商场青睐,大家都在争着上!

随着城市化进程的不断推进&#xff0c;楼宇智慧公厕管理系统的应用已经成为城市管理的重要一环。通过智能化的监控和管理&#xff0c;公厕的卫生状况得到了有效控制&#xff0c;为市民提供了更好的公厕服务。一、楼宇智慧公厕系统案例展示楼宇智慧公厕系统是一种基于智能科技的…

基础算法-差分矩阵

&#xff08;一&#xff09;课堂笔记 &#xff08;二&#xff09;思路详解 如果扩展到二维&#xff0c;我们需要让二维数组被选中的子矩阵中的每个元素的值加上c,是否也可以达到O(1)的时间复杂度。答案是可以的&#xff0c;考虑二维差分。 a[][]数组是b[][]数组的前缀和数组&a…

less预处理语言的运用之-变量拼接那点事

less语法的技巧总结&#xff0c;很基础&#xff0c;熟练掌握后能提高我们在大型项目中的开发效率 a:0.5; showdaw-px:100; mkcolor1:#6ec5ff; num:1; .outer{//拼接的字符串在变量后面&#xff0c;需要在冒号后面加~width:~"{showdaw-px}px";//拼接的字符串在冒号后…

Vue脚手架使用 【实战篇】

一、一个组件引用另一个组件&#x1f349; (1) 引入被引用的组件&#x1f95d; 自己创建的组件 lzq.vue 组件必须创建在components文件夹下 将自己创建的组件导入到主页面中 (2)声明该组件&#x1f95d; 本人理解&#xff1a; 声明组件可以理解为声明一个变量一样 (3)使用组…

【sql注入-报错注入2】GTID_SUBTRACT()函数 报错注入

目录 GTID_SUBTRACT()报错注入 一、语法介绍&#xff1a; 二、报错原因 网络安全小圈子 &#xff08;***注&#xff1a;注意看版本要求&#xff09; GTID_SUBTRACT()报错注入 一、语法介绍&#xff1a; 版本&#xff1a; MySQL >5.6 GTID_SUBTRACT()函数是MySQL中的一…

Unity20223.4f1中添加Tile的方法

如图&#xff0c;按顺序选择添加Rectangular&#xff08;矩形地图&#xff09;即可&#xff0c;矩形是常规瓦片地图 除常规瓦片地图外&#xff0c;Unity 还提供 Hexagonal Point Top Tilemap 和 Hexagonal Flat Top Tilemap 瓦片地图。六角形瓦片通常用于战略类桌面游戏&#x…

vertical-align middle不生效如何修改

vertical-align middle不生效如何修改 vertical-align的定义1.在父元素中增加display:table-cell&#xff0c;vertical-align 写在在父元素中2.在父元素中增加空的span元素&#xff0c;并设置其高度为100%&#xff0c;vertical-middle居中3.父元素line-height 100% 和子元素ver…