Leetcode---361周赛

news2024/11/25 13:09:47

题目列表

2843. 统计对称整数的数目

2844. 生成特殊数字的最少操作

2845. 统计趣味子数组的数目

2846. 边权重均等查询

一、统计对称整数的数目

 这题看一眼数据范围,直接就可以开始暴力求解了,按照题目要求模拟就行,代码如下

class Solution {
public:
    int countSymmetricIntegers(int low, int high) {
        int ans=0;
        for(int i=low;i<=high;i++){
            string s=to_string(i);
            if(s.size()%2)continue;
            int m=s.size()/2;
            int diff=0;
            for(int j=0;j<m;j++)
                diff+=(s[j]-s[j+m]);
            if(diff==0)ans++;
        }
        return ans;
    }
};

二、生成特殊数字的最小操作数

这题其实也不难,只要知道25的倍数的特点就行,即末尾两位为00,25 ,50,75的数字,题目要求最小操作数,就是在这四种情况中找到操作数最小的,当然还要注意0也能被25的整除,所以当不满足前面四种情况时, 还要考虑数字中是否包含0,如果有返回n-1,如果没有返回n。

代码如下

class Solution {
public:
    int minimumOperations(string num) {
        int n=num.size();
        function<int(string)>f=[&](string s)->int{
            size_t pos=num.rfind(s[1]);
            if(pos==-1||pos==0)return n;
            pos=num.rfind(s[0],pos-1);
            if(pos==-1)return n;
            return n-pos-2;
        };
        int ret1=min(min(f("00"),f("25")),min(f("75"),f("50")));
        int ret2=n-(num.find('0')!=-1);
        return min(ret1,ret2);
    }
};

三、统计趣味子数组的数目

求满足条件的子数组的数量,一般都是用前缀和+哈希表,这题前缀和是求满足nums[i]%modulo=k的子数组的数量,这里有一些求余运算的数学知识,如下

假设s[ ]为前缀和数组,i<j,且(s[j]-s[i])%m=k,

那么s[j]%m-s[i]%m=k,即s[i]%m=s[j]%m-k,这里有一个细节要注意,s[j]%m-s[i]%m可能小于0,这样就需要+m之后再%m,才能得到正确的取模值,即s[j]%m-s[i]%m+m=k,s[i]%m=s[j]%m-k+m

综上所诉:无论s[j]%m-s[i]%m结果是正是负,s[i]%m=(s[j]%m-k+m)%m

 所以,哈希表只用记录s%m之后的值的数量即可

 代码如下

class Solution {
public:
    long long countInterestingSubarrays(vector<int>& nums, int m, int k) {
        long long ans=0;
        int s=0;
        unordered_map<int,int>hash;
        hash[0]=1;//这里要注意!!!,代表没有元素时,余数为0的情况
        for(auto x:nums){
            s+=(x%m==k);
            s%=m;
            ans+=hash[(s-k+m)%m];
            hash[s%m]++;
        }
        return ans;
    }
};

四、边权重均等查询

 思路如下:

代码如下 

class Solution {
public:
    vector<int> minOperationsQueries(int n, vector<vector<int>>& edges, vector<vector<int>>& queries) {
        //创建矩阵--记录每个点所连接的点和权值
        vector<vector<pair<int,int>>>g(n);
        for(auto& e:edges){
            int x=e[0],y=e[1],w=e[2]-1;
            g[x].push_back({y,w});
            g[y].push_back({x,w});
        }

        int m=32-__builtin_clz(n);//得到前导0的个数
        int cnt[n][m][26];
        memset(cnt,0,sizeof(cnt));
        int pa[n][m];
        memset(pa,-1,sizeof(pa));
        vector<int>depth(n);//记录每个点的深度
        function<void(int,int)> dfs=[&](int x,int father){
            pa[x][0]=father;
            for(auto [y,w]: g[x]){
                if(y!=father){
                    cnt[y][0][w]=1;
                    depth[y]=depth[x]+1;
                    dfs(y,x);
                }
            }
        };
        dfs(0,-1);

        //倍增
        for(int i=1;i<m;i++){
            for(int j=0;j<n;j++){
                int p=pa[j][i-1];
                if(p!=-1){
                    pa[j][i]=pa[p][i-1];
                    for(int k=0;k<26;k++){
                        cnt[j][i][k]=cnt[j][i-1][k]+cnt[p][i-1][k];
                    }
                }
            }
        }

        vector<int> ans;
        for(auto&e:queries){
            int a=e[0],b=e[1];
            int len=depth[a]+depth[b];
            if(depth[a]>depth[b])
                swap(a,b);
            int cw[26]{};

            //让x和y在同一高度
            for(int k=depth[b]-depth[a];k;k&=k-1){
                int idx=__builtin_ctz(k);
                int p=pa[b][idx];
                for(int j=0;j<26;j++)
                    cw[j]+=cnt[b][idx][j];
                b=p;
            }

            //同时向上跳
            if(a!=b){
                for(int i=m-1;i>=0;i--){
                    int A=pa[a][i],B=pa[b][i];
                    if(A!=B){
                        for(int k=0;k<26;k++){
                            cw[k]+=cnt[a][i][k]+cnt[b][i][k];
                        }
                        a=A,b=B;
                    }
                }
                //跳完之后,还在LAC下面一层
                for(int k=0;k<26;k++){
                    cw[k]+=cnt[a][0][k]+cnt[b][0][k];
                }
                a=pa[a][0];
            }
            int lca=a;
            len-=depth[lca]*2;
            ans.push_back(len-*max_element(cw,cw+26));
        }
        return ans;
    }
};

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

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

相关文章

使用纯C语言定义通用型数据结构的方法和示例

文章目录 前言以实现优先队列来描述实现思想基本类型的包装类型比较函数演示总结 前言 最近一段时间在复习数据结构和算法&#xff0c;用的C语言&#xff0c;不得不说&#xff0c;不学个高级语言再回头看C语言根本不知道C语言的强大和完美&#xff0c;不过相比之下也有许多不便…

Linux内核分析与应用

Linux 内核分析与应用[1] 蜻蜓点水,可作抛砖引玉 1.概述 用到的几个命令: insmod dmesg[2] lsmod[3] 章节测试: 部分可参考[4] <1>. Linux得以流行&#xff0c;是因为遵循了GPL协议&#xff0c;并不是因为遵循POSIX标准 (错) linux操作系统概述[5] linux概述[6] <2>…

建站系列(三)--- 网络协议

目录 相关系列文章前言一、定义二、术语简介三、协议的组成要素四、网络层次划分五、常见网络协议划分六、常用协议介绍&#xff08;一&#xff09;TCP/IP&#xff08;二&#xff09;HTTP协议&#xff08;超文本传输协议&#xff09;&#xff08;三&#xff09;SSH协议 相关系列…

robotframework 获取当前时间

1、获取年月日时分秒格式的数据 命令&#xff1a;${time} Get Current Date result_format%Y%m%d%H%M%S 日期时间显示结果显示形式&#xff1a;20230908102553 2、获取时间戳形式的数据 命令&#xff1a; ${time} Get Current Date result_formattimestamp …

私有gitlab的搭建和配置教程

文章目录 1. 说明2. 安装操作2.1 依赖项2.2 gitlab-ce2.3 简要配置2.4 网页操作2.5 中文配置2.6 其他操作 3. 配置https3.1 配置证书3.2 url配置3.3 网页访问3.4 认证错误 4. ssh操作4.1 生成文件4.2 web配置4.3 额外操作 1. 说明 此教程基于Ubuntu22.04进行阐述&#xff0c;只…

# Spring MVC与RESTful API:如何设计高效的Web接口

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【MySQL】详解聚合查询、多表查询

MySQL 增删查改&#xff08;进阶&#xff09; 文章目录 MySQL 增删查改&#xff08;进阶&#xff09;01 表的设计表的三大范式 02 查询操作进阶新增聚合查询countsumavgmaxmin 分组查询 GROUP BYHAVING 联合查询/多表查询关键思路引入内连接外连接左外连接&#xff1a;left joi…

WAMP服务器对python进行配置

WAMP服务器中安装python WAMP服务器中安装python 步骤 D:\wamp\bin\apache\Apache2.4.4\conf\httpd.conf // 打开找到Wamp安装目录下&#xff0c;apache的配置文件 将该配置文件备份一份 LoadModule cgi_module modules/mod_cgi.so // 找到配置文件中该行&#xff0c;把行前面…

探索OLED透明屏触摸技术:创新引领智能生活的未来

OLED透明屏触摸技术作为一项创新技术&#xff0c;正在引领智能生活的未来。’ 通过将透明屏和触摸技术相结合&#xff0c;OLED透明屏触摸设备不仅具备了OLED显示屏的优势&#xff0c;还具备了触摸操作的便利性&#xff0c; 在这里&#xff0c;尼伽将介绍OLED透明屏触摸技术的…

Linux教程||Linux 系统启动过程

Linux 系统启动过程 linux启动时我们会看到许多启动信息。 Linux系统的启动过程并不是大家想象中的那么复杂&#xff0c;其过程可以分为5个阶段&#xff1a; 内核的引导。运行init。系统初始化。建立终端 。用户登录系统。 内核引导 当计算机打开电源后&#xff0c;首先是B…

Apache Hive之数据查询

文章目录 版权声明数据查询环境准备基本查询准备数据select基础查询分组、聚合JOINRLIKE正则匹配UNION联合Sampling采用Virtual Columns虚拟列 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明&#xff0c;所有版权属于黑马程序员或相关权利…

Linux指令二【进程,权限,文件】

进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程&#xff0c;是操作系统进行 资源分配和调度的一个独立单位&#xff0c;是应用程序运行的载体。 一、进程基本指令 1.ps&#xff1a;当前的用户进程 ps 只显示隶属于自己的进程状态ps -aux 显示所有进程…

JavaScript基础入门之输出

目录 目录 前言 系列文章列表 JavaScript初学 思维导图 1&#xff0c;如何在Edge浏览器中执行 JavaScript 1.1,首先按F12 1.2,使用控制台窗口调试js代码 1.2.1,如何使用 1.2.2,进行js测试使用 1.3,Edge小脚本 1.3.1,如何创建脚本 1.3.2,运行脚本 2&#xff0c;Ja…

CRC原理介绍及STM32 CRC外设的使用

1. CRC简介 循环冗余校验&#xff08;英语&#xff1a;Cyclic redundancy check&#xff0c;简称CRC&#xff09;&#xff0c;由 W. Wesley Peterson 于 1961 年首次提出的一种纠错码理论。 CRC是一种数据纠错方法&#xff0c;主要应用于数据通信或者数据存储的场合&#xff…

计算机专业毕业设计项目推荐02-个人医疗系统(Java+原生Js+Mysql)

个人医疗系统&#xff08;Java原生JsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以…

Javase | String字符串-1

目录&#xff1a; 1.字符串 (String)2.new String对象 和 不new String对象时内存分析&#xff1a;2.1 不new String对象时内存分析2.2 new String对象时内存分析 3.以下程序一共创建了几个对象&#xff1f;4.String类中常用“构造方法”String( )String(byte [ ] b)String( by…

字符串逆序(不使用库函数并用递归实现)

文章目录 前言一、题目要求二、解题步骤1.大概框架2.如何反向排列&#xff1f;3.模拟实现strlen4.实现反向排列5.递归实现反向排列 总结 前言 嗨&#xff0c;亲爱的读者们&#xff01;我是艾老虎尤&#xff0c;。今天&#xff0c;我们将带着好奇心&#xff0c;探索一个题目&am…

显示器鼠标滚动时或者拖拽文字变为绿色

新电脑&#xff0c;新显示器&#xff0c;看文章时滚动鼠标滑轮&#xff0c;文字颜色就变为绿色。 拖住文本文档或者浏览器等有文字的窗口&#xff0c;文字也会变为绿色。 静止时一点儿问题没有。 以下视频展示滚动和拖拽的操作&#xff0c;视频看不出变色&#xff0c;只参考…

TuyaOS开发学习笔记(2)——NB-IoT开发SDK架构、运行流程

一、SDK架构 1.1 架构框图 基于 TuyaOS 系统&#xff0c;可以裁剪得到的适用于 NB-IoT 协议产品接入的 SDK。SDK 将设备配网、上下行数据通信、产测授权、固件 OTA 升级等接口进行封装&#xff0c;并提供相关函数。 1.2 目录结构 1.2.1 TuyaOS目录说明 adapter&#xff1a;T…

transformer 总结(超详细-初版)

相关知识链接 attention1attention2 引言 本文主要详解 transformer 的算法结构以及理论解释&#xff0c;代码实现以及具体实现时候的细节放在下一篇来详述。 下面就通过上图中 transformer 的结构来依次解析 输入部分(Encode 侧) input 输出主要包含 两个部分&#xff1a…