LeetCode---384周赛

题目列表

3033. 修改矩阵

3034. 匹配模式数组的子数组数目 I

3035. 回文字符串的最大数量

3036. 匹配模式数组的子数组数目 II

一、修改矩阵

简单模拟即可,代码如下

class Solution {
public:vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {int n=matrix.size(),m=matrix[0].size();for(int i=0;i<m;i++){int mx=0;for(int j=0;j<n;j++)mx=max(mx,matrix[j][i]);for(int j=0;j<n;j++)if(matrix[j][i]<0)matrix[j][i]=mx;}return matrix;}
};

 二、匹配模式数组的子数组数目I&II

(二、四题目相同就一起讲了,暴力的做法就不在说了)

这题说实话,也不是很难,关键在于我们要将题目中的信息就行转化,即要将nums数组转换成1/0/-1的数组,然后就是该数组与pattern数组的匹配问题,等价于字符串匹配问题,只不过将字符变成了数字,用kmp算法,代码如下

class Solution {
public:int countMatchingSubarrays(vector<int>& nums, vector<int>& pattern) {int n=nums.size();vector<int> v(n-1);for(int i=0;i<n-1;i++)v[i]=(nums[i]<nums[i+1])-(nums[i]>nums[i+1]);//利用布尔值0/1来得到1/0/-1,也可以用if语句int m=pattern.size();vector<int>next(m);for(int i=1,j=0;i<m;i++){while(j&&pattern[i]!=pattern[j])j=next[j-1];if(pattern[j]==pattern[i])j++;next[i]=j;}int ans=0;for(int i=0,j=0;i<n-1;i++){while(j&&v[i]!=pattern[j])j=next[j-1];if(v[i]==pattern[j])j++;if(j==m){ans++;j=next[j-1];}}return ans;}
};

当然这题也可以用上周赛中的z函数来解答,这里既然又说到z函数,就具体讲解一下z函数的原理和操作,如下图。

那么如何用z函数这个算法来求解字符串匹配问题呢?

代码如下

class Solution {
public:int countMatchingSubarrays(vector<int>& nums, vector<int>& pattern) {int n=nums.size(),m=pattern.size(),ans=0;vector<int> v(pattern);for(int i=0;i<n-1;i++)v.push_back((nums[i]<nums[i+1])-(nums[i]>nums[i+1]));vector<int> z(v.size());z[0]=v.size();int l=0,r=0;//维护z-box的区间for(int i=1;i<v.size();i++){if(i<=r) z[i]=min(r-i+1,z[i-l]);while(i+z[i]<v.size()&&v[z[i]]==v[i+z[i]]) z[i]++;if(r<i+z[i]-1) l=i,r=i+z[i]-1;if(i>=pattern.size()&&z[i]>=pattern.size()) ans++;}return ans;}
};

三、回文字符串的最大数量

这题算是一个构造题,即如何构造回文串使得回文串的个数尽可能得多,首先我们必然要统计各个字母出现的次数,然后进行分配,从贪心的角度来思考,我们肯定是优先从字符串长度短的开始构造回文串。接下来就是如何构造回文串的问题。

对于回文串,我们只要考虑它的对称的两边是否够用即可(对于奇数长度,中间的那个我们不用考虑,因为字符的个数是足够的,大家可以细品一下这句话),换句话说,我们可以看"成双的字符"的个数有多少,能满足多少个回文串即可,代码如下

class Solution {
public:int maxPalindromesAfterOperations(vector<string>& words) {int cnt[26]={0};int n=words.size();vector<int>v;for(auto str:words){v.push_back(str.size());for(auto e:str){cnt[e-'a']++;}}int p=0,ans=0;for(auto x:cnt) p+=x/2;//得到有几对sort(v.begin(),v.end());for(auto x:v){if(p>=x/2)ans++,p-=x/2;elsebreak;}return ans;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud-Nacos集群搭建

本文详细介绍了如何在SpringCloud环境中搭建Nacos集群&#xff0c;为读者提供了一份清晰而详尽的指南。通过逐步演示每个关键步骤&#xff0c;包括安装、配置以及Nginx的负载均衡设置&#xff0c;读者能够轻松理解并操作整个搭建过程。 一、Nacos集群示意图 Nacos&#xff0…

VS中设置#define _CRT_SECURE_NO_WARNINGS的原因和设置方式

原因&#xff1a; 在编译老的用C语言的开源项目的时候&#xff0c;可能因为一些老的.c文件使用了strcpy,scanf等不安全的函数&#xff0c;而报警告和错误&#xff0c;而导致无法编译通过。 解决方案&#xff1a; 我们有两种解决方案&#xff1a; 1、在指定的源文件的开头定…

20-k8s中pod的调度-nodeSelector节点选择器

一、概念 我们先创建一个普通的deploy资源&#xff0c;设置为10个副本 [rootk8s231 dns]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: dm01 spec: replicas: 10 selector: matchLabels: k8s: k8s template: metadata: …

C 练习实例23-打印菱形

题目&#xff1a;打印出如下图案&#xff08;菱形&#xff09;。 * *** ***** ******* ***** *** * 题目分析&#xff1a; 先打印前4行&#xff0c;因为是递增关系。 第0行&#xff1a;打印3个空格&#xff0c;1个* 第1行&#xff1a;打印2个空格&#xff0c;3个*…

(每日持续更新)jdk api之ObjectInputStream.GetField基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

云计算基础-华为存储实验

存储配置流程 创建硬盘域&#xff08;CK&#xff0c;包括热备CK&#xff09;创建存储池&#xff08;CKG、Extent&#xff09;创建LUN、LUN组、将LUN加入LUN组创建主机、主机组、将主机加入主机组创建映射视图&#xff08;LUN组和主机组的映射&#xff09; 1. 创建CK 创建硬盘…

yolov8源码解读Detect层

yolov8源码解读Detect层 Detect层解读网络各层解读及detect层后的处理 关于网络的backbone,head&#xff0c;以及detect层后处理&#xff0c;可以参考文章结尾博主的文章。 Detect层解读 先贴一下全部代码,下面一一解读。 class Detect(nn.Module):"""YOLOv8 …

“挖矿”系列:细说Python、conda 和 pip 之间的关系

继续挖矿&#xff0c;挖“金矿”&#xff01; 1. Python、conda 和 pip&#xff08;挖“金矿”工具&#xff09; Python、conda 和 pip 是在现代数据科学和软件开发中常用的工具&#xff0c;它们各自有不同的作用&#xff0c;但相互之间存在密切的关系&#xff1a; Python&…

数据库MySQL中出现乱码和表格不对齐怎么解决

MySQL中出现乱码问题及解决办法&#xff1a; 情况类似&#xff1a; 首先进入到数据库中&#xff0c;命令&#xff1a;mysql -h localhost -uroot -p或者mysql -uroot -p;进入数据库后选择一个你的数据库查看表中的中文是否乱码 以上是数据库中表格出现乱码情况&#xff0c;原…

Stable Diffusion webui安装详细教程

上一篇文章介绍了sd主流的ui&#xff0c;相信大家已经有所了解&#xff0c;下面为大家介绍sd-webui的安装详细教程 文章目录 一、 安装包说明二、对电脑的要求三、安装文件介绍四、安装步骤五、电脑问题与云主机六、界面简要说明及通用反向提示词 一、 安装包说明 通常我们使…

第12章 反射

12.1 反射概述 Java的反射&#xff08;reflection&#xff09;机制是指在程序的运行状态中&#xff0c;可以构造任意一个类的对象&#xff0c;可以得到任意一个对象所属的类的信息&#xff0c;可以调用任意一个类的成员变量和方法&#xff0c;可以获取任意一个对象的属性和方法…

绝地求生:荣都加入竞技模式,地图轮换系统不会取消

从28.1开始&#xff0c;荣都将成为&#xff08;亚服&#xff09;竞技地图的一份子&#xff08;有消息称日韩服将移除荣都&#xff09; 所以各地区地图轮换将会根据各地区的偏好轮换。 在接下来竞技地图换轮中&#xff0c;四个地图出现的概率为: 艾伦格Erangel(25%)/米拉玛Miram…