【LeetCode周赛】第 384 场周赛

目录

  • 3033. 修改矩阵 简单
  • 3034. 匹配模式数组的子数组数目 I 中等
  • 3035. 回文字符串的最大数量 中等
  • 3036. 匹配模式数组的子数组数目 II 困难

3033. 修改矩阵 简单

3033. 修改矩阵

分析:
获取每一列的最大元素,将矩阵中的 -1 替换成每一列的最大元素。

代码:

class Solution {
public:vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {int m=matrix.size(), n=matrix[0].size();vector<int> x,y;for(int i=0;i<n;i++){int t = -1;x.clear(),y.clear();for(int j=0;j<m;j++){if(matrix[j][i]==-1) x.push_back(j),y.push_back(i);else t=max(t,matrix[j][i]);}for(int k=0;k<x.size();k++){matrix[x[k]][y[k]]=t;}}return matrix;}
};


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

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

分析:
根据 nums 中各个元素的值,计算得到其对应的 匹配模式数组 nums_pattern
再在 nums_pattern 中寻找子数组 pattern 的数量。

代码:

class Solution {
public:int countMatchingSubarrays(vector<int>& nums, vector<int>& pattern) {int n=nums.size(), m=pattern.size(), ans=0;vector<int> cnt;for(int i=1;i<n;i++){if(nums[i]>nums[i-1]) cnt.push_back(1);else if(nums[i]==nums[i-1]) cnt.push_back(0);else cnt.push_back(-1);}for(int i=0;i<cnt.size()-m+1;i++){for(int j=0;j<m;j++){if(cnt[i+j]!=pattern[j]) break;if(j==m-1) ans++;}}return ans;}
};


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

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

分析:
题目求的是最终为回文字符串的数量,并非最小的交换次数,因此转换思维直接 构造 回文字符串。

  • 首先统计所有字符串中各个小写字母的出现次数,同时记录各个字符串的长度。
  • 对字符串长度数组进行升序排序(构造长的回文字符串时,可能会导致多个短的字符串构不成回文字符串)。
  • 利用贪心思维构造回文字符串
    • 正常情况下,一次直接填入偶数个字符保证字符串为回文字符串。
    • 如果字符串长度为奇数,不能填入偶数字符时,计数数组 cnt 中寻找是否有剩余次数为奇数的字符,否则返回还没使用完的字符。
  • 对于 能直接使用偶数字符对填充完毕,或者 剩一个字符的字符串,最终都能构成回文字符串,此时数量 +1。最终即为回文字符串的最大数量。

代码:

class Solution {
public:int findOdd(int cnt[]){int ans=-1;for(int i=0;i<26;i++){if(cnt[i]%2==1) return i;else if(cnt[i]>0) ans=i;}return ans;}int maxPalindromesAfterOperations(vector<string>& words) {int cnt[26], ans=0;memset(cnt, 0, sizeof(cnt));vector<int> t;for(auto word : words){for(auto i : word){cnt[i - 'a']++;}t.push_back(word.length());}sort(t.begin(), t.end());for(int i : t){int tmp = i;for(int j=0;j<26&&tmp>1;j++){int tt = tmp/2,tc = cnt[j]/2;if(tt*2<=cnt[j]){tmp-=tt*2;cnt[j]-=tt*2;}else{tmp-=tc*2;cnt[j]-=tc*2;}}if(tmp==0){ans++;continue;}if(tmp==1){cnt[findOdd(cnt)]--;ans++;}else{int j=0;while(tmp){if(cnt[j]>0){if(cnt[j]>=tmp) cnt[j]-=tmp,tmp=0;else tmp-=cnt[j],cnt[j]=0;}j++;}}}return ans;}
};

更加巧妙方法:利用位运算。

class Solution {
public:int maxPalindromesAfterOperations(vector<string>& words) {int ans = 0, tot = 0, mask = 0;for (auto &w : words) {tot += w.length();for (char c : w) {mask ^= 1 << (c - 'a'); // 对于出现奇数次的字符,对应位为1,否则为0}}tot -= __builtin_popcount(mask); // 减去无法构成相同字符对的字符(单个的字符)cout<<tot<<endl;ranges::sort(words, [](const auto &a, const auto &b) {return a.length() < b.length();});for (auto &w : words) {tot -= w.length() / 2 * 2; // 长度为奇数的字符串,不考虑中间的单个字符if (tot < 0) break; // 如果相同字符对无法构建剩下的回文字符串,则跳出循环,此即为回文字符串的最大数量ans++;}return ans;}
};


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

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

分析:
根据 nums 中各个元素的值,计算得到其对应的 匹配模式数组 nums_pattern
再在 nums_pattern 中寻找子数组 pattern 的数量,即数组的模式匹配,可以利用 KMP算法 解决。

代码:

class Solution {
public:int countMatchingSubarrays(vector<int>& nums, vector<int>& pattern) {int n=nums.size(), m=pattern.size(), ans=0;vector<int> cnt, ne(m);for(int i=1;i<n;i++){if(nums[i]>nums[i-1]) cnt.push_back(1);else if(nums[i]==nums[i-1]) cnt.push_back(0);else cnt.push_back(-1);}ne[0]=-1;for(int i=1,j=-1;i<m;i++){while(j!=-1&&pattern[i]!=pattern[j+1]) j=ne[j];if(pattern[i]==pattern[j+1]) j++;ne[i]=j;}for(int i=0,j=-1;i<n-1;i++){while(j!=-1&&cnt[i]!=pattern[j+1]) j=ne[j];if(cnt[i]==pattern[j+1]) j++;if(j==m-1){ans++;j=ne[j];}}return ans;}
};

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

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

相关文章

java开源xml工具类介绍

在Java中处理XML的常用开源工具有很多&#xff0c;以下是一些流行的库以及简单的示例代码&#xff1a; DOM4J DOM4J 是一个非常流行的Java库&#xff0c;用于处理XML&#xff0c;DOM4J 易于使用&#xff0c;并且提供了很好的性能。 Maven 依赖 …

游戏物理引擎+特效系统

原文链接&#xff1a;游戏开发入门&#xff08;六&#xff09;游戏物理引擎_游戏开发物理引擎-CSDN博客 游戏开发入门&#xff08;七&#xff09;特效系统_csdn 游戏效果开发-CSDN博客 1.游戏应用物理的目的就是为了真实 2.物理引擎&#xff1a; 可以认为属于游戏引擎的一个…

挑战杯 基于LSTM的天气预测 - 时间序列预测

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 机器学习大数据分析项目 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/po…

Stable Diffusion——基础模型、VAE、LORA、Embedding各个模型的介绍与使用方法

前言 Stable Diffusion&#xff08;稳定扩散&#xff09;是一种生成模型&#xff0c;基于扩散过程来生成高质量的图像。它通过一个渐进过程&#xff0c;从一个简单的噪声开始&#xff0c;逐步转变成目标图像&#xff0c;生成高保真度的图像。这个模型的基础版本是基于扩散过程…

论文精读--word2vec

word2vec从大量文本语料中以无监督方式学习语义知识&#xff0c;是用来生成词向量的工具 把文本分散嵌入到另一个离散空间&#xff0c;称作分布式表示&#xff0c;又称为词嵌入&#xff08;word embedding&#xff09;或词向量 Abstract We propose two novel model architec…

白银交易新手指南:怎样选择可靠的现货交易平台?

在投资市场上&#xff0c;白银作为一种贵金属&#xff0c;具有较高的投资价值和风险防范功能。对于白银交易新手来说&#xff0c;选择一个可靠的现货交易平台是至关重要的。那么&#xff0c;如何挑选一个适合自己的现货交易平台呢&#xff1f; 1. 平台资质 一个正规的现货交易…

Spring最新核心高频面试题(持续更新)

1 什么是Spring框架 Spring框架是一个开源的Java应用程序开发框架&#xff0c;它提供了很多工具和功能&#xff0c;可以帮助开发者更快地构建企业级应用程序。通过使用Spring框架&#xff0c;开发者可以更加轻松地开发Java应用程序&#xff0c;并且可以更加灵活地组织和管理应…

【软考高项】【英语知识】-- 单词积累

目录 一、常见计算机技术词汇 二、项目管理词汇 2.1 十大知识域 2.2 五大过程组 2.3 49个子过程 2.4 工具和技术汇总 2.5 输入和输出汇总 一、常见计算机技术词汇 序号中文英文1云计算Cloud computing2云存储Cloud storage3云服务Cloud service4软件即服务SaaS5平台即服…

[leetcode M] 105. 从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,15,7]…

【Azure 架构师学习笔记】- Azure Databricks (8) --UC架构简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件 前言 UC 简单来说&#xff0c;就是管理两样东西&#xff1a;用户和元存储。 用户管理 所有Databri…

C#,笛卡尔树(Cartesian Tree)的构造、遍历算法与源代码

Ren Descartes 一、笛卡尔&#xff08;Ren Descartes&#xff09; 勒内笛卡尔&#xff08;Ren Descartes&#xff0c;1596年3月31日-1650年2月11日&#xff09;&#xff0c;1596年3月31日生于法国安德尔-卢瓦尔省的图赖讷&#xff08;现笛卡尔&#xff0c;因笛卡尔得名&#…

Day 30 标准IO

文章目录 1.什么是标准IO1.1 概念1.2 特点1.3 操作 2.缓存区3.函数接口3.1 打开文件fopen3.2 关闭文件 fclose3.3 读写文件操作3.3.1 每次读写一个字符&#xff1a;fgetc()、fputc()每次读一个字符fgetc()每次写一个字符fputc()(1)针对文件(2)针对终端feof和ferror 3.3.2 每次一…

通过Docker Compose的方式在Docker中安装Maven环境

目前可以说 Docker 已经是在开发部署中成为主流&#xff0c;所以我们很多环境和工具都会安装在 Docker 容器中&#xff0c;Maven 环境是 SpringBoot 项目中最常用的依赖管理工具。当我们使用自动运维工具如 Ansible、Chef 、Puppet、Walle、Spug等&#xff09;管理和部署 Maven…

击败.helper勒索病毒:恢复被加密的数据文件的方法

导言: 近年来&#xff0c;勒索病毒成为网络安全领域的一大威胁&#xff0c;其中.helper勒索病毒更是备受关注。该类型的勒索软件以其高效的加密算法&#xff0c;能够将用户的文件加密&#xff0c;迫使用户支付赎金才能解密数据。本文将介绍.helper勒索病毒的特点、恢复被加密数…

Unity红点系统的架构与设计

在游戏开发中&#xff0c;红点系统是一种常见的功能&#xff0c;用于提示玩家有未读消息或待处理任务。在Unity引擎中&#xff0c;我们可以使用脚本来实现红点系统&#xff0c;下面我将介绍一种基于Unity的红点系统的架构与设计&#xff0c;并给出对应的代码实现。 红点系统的代…

集成使用 GitHub Copilot 提升 IDEA 开发效率

集成使用 GitHub Copilot 提升 IDEA 开发效率 在现代软件开发中&#xff0c;集成开发环境&#xff08;IDE&#xff09;如IntelliJ IDEA已经成为开发人员不可或缺的工具。它们提供了代码编辑、调试、版本控制等一系列功能&#xff0c;极大地提高了开发效率。而GitHub Copilot作…

【Docker】Linux主机部署Docker

Docker部署 1.二进制文件部署 到如下地址&#xff0c;下载二进制包。 Docker官网&#xff1a;https://docs.docker.com/engine/install/binaries/ 网易镜像源&#xff1a;https://mirrors.163.com/docker-ce/linux/static/stable/x86_64/ 下载好的二进制包上传到主机&#xf…

【Android 13】使用Android Studio调试系统应用之Settings移植(十):外部模块依赖WifiTrackerLibRes的移植

文章目录 一、篇头二、系列文章2.1 Android 13 系列文章2.2 Android 9 系列文章2.3 Android 11 系列文章三、 WifiTrackerLib子模块3.1 源目录3.2 Android.bp四、移植方法4.1 创建模块4.2 替换源文件4.3 修改build.gradle4.4 图示4.5 模块编译通过

003:高精地图数据采集

摘要&#xff1a;高精度地图数据采集涉及多个环节和技术&#xff0c;需要严谨的规划和执行&#xff0c;以确保采集到的地理信息质量可靠、精准&#xff0c;并能够支持各种智能交通和导航应用的需求。 一、设备准备 高精地图数据采集需要高精度的设备&#xff0c;如Lidar&#…

Java之获取Nginx代理之后的客户端IP

Java之获取Nginx代理之后的客户端IP Nginx代理接口之后&#xff0c;后台获取的IP地址都是127.0.0.1&#xff0c;解决办法是需要配置Nginx搭配后台获取的方法&#xff0c;获得设备的真实地址。我们想要获取的就是nginx代理日志中的这个IP nginx配置 首先在nginx代理的对应lo…