LeetCode 第384场周赛个人题解

目录

100230. 修改矩阵

题目链接

题目描述

接口描述

思路分析

代码详解

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

题目链接

题目描述

接口描述

思路分析

代码详解

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

题目链接

题目描述

接口描述

思路分析

代码详解

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

题目链接

题目描述

接口描述

思路分析

代码详解


100230. 修改矩阵

题目链接

100230. 修改矩阵 - 力扣(LeetCode)

题目描述

给你一个下标从 0 开始、大小为 m x n 的整数矩阵 matrix ,新建一个下标从 0 开始、名为 answer 的矩阵。使 answer 与 matrix 相等,接着将其中每个值为 -1 的元素替换为所在列的 最大 元素。

返回矩阵 answer 。

接口描述

class Solution {
public:vector<vector<int>> modifiedMatrix(vector<vector<int>>& matrix) {}
};

思路分析

代码详解

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

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

题目链接

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

题目描述

给你一个下标从 0 开始长度为 n 的整数数组 nums ,和一个下标从 0 开始长度为 m 的整数数组 pattern ,pattern 数组只包含整数 -1 ,0 和 1 。

大小为 m + 1 的

子数组

  nums[i..j] 如果对于每个元素  pattern[k] 都满足以下条件,那么我们说这个子数组匹配模式数组  pattern :
  • 如果 pattern[k] == 1 ,那么 nums[i + k + 1] > nums[i + k]
  • 如果 pattern[k] == 0 ,那么 nums[i + k + 1] == nums[i + k]
  • 如果 pattern[k] == -1 ,那么 nums[i + k + 1] < nums[i + k]

请你返回匹配 pattern 的 nums 子数组的 数目 。

接口描述

class Solution {
public:int countMatchingSubarrays(vector<int>& nums, vector<int>& pattern) {}
};

思路分析

其实就是字符串匹配板子题

把nums两两配对按照递增递减相等分配字符,可以得到长度为n - 1的字符串a,把pattern转化为字符串b,题目就是让找a中b的数目

转化完跑KMP即可

关于KMP见:KMP算法详解 [c++]

时间复杂度O(n+m)

代码详解

class Solution
{
public:void get_nextval(const string &src, vector<int> &nextval){int j = 0, k = -1;nextval[0] = -1;while (j < (int)src.size() - 1){if (k == -1 || src[j] == src[k]){j++;k++;nextval[j] = k;}else{k = nextval[k];}}}int countMatchingSubarrays(vector<int> &nums, vector<int> &pattern){int n = nums.size(), m = pattern.size(), ret = 0;string a, b;for (int i = 0; i < n - 1; i ++)a.push_back(nums[i] == nums[i + 1] ? '0' : (nums[i] < nums[i + 1] ? '1' : '2'));for (auto x : pattern)b.push_back((~x) ? (x ^ 48) : '2');vector<int> next(m);get_nextval(b, next);for (int i = 0, j = 0; i < n - 1;){if (j == -1 || a[i] == b[j])i++, j++;elsej = next[j];if (j == m)i--, ret++, j = next[m - 1];}return ret;}
};

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

题目链接

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

题目描述

给你一个下标从 0 开始的字符串数组 words ,数组的长度为 n ,且包含下标从 0 开始的若干字符串。

你可以执行以下操作 任意 次数(包括零次):

  • 选择整数ijxy,满足0 <= i, j < n0 <= x < words[i].length0 <= y < words[j].length交换 字符 words[i][x] 和 words[j][y] 。

返回一个整数,表示在执行一些操作后,words 中可以包含的回文字符串的 最大 数量。

注意:在操作过程中,i 和 j 可以相等。

接口描述

class Solution {
public:int maxPalindromesAfterOperations(vector<string>& words) {}
};

思路分析

贪心

抛开题目,给一个字符集U,让构造k个字符串(长度固定)如何尽可能多的构造回文串?

先构造短的,并且分配若干个字符对(字符对就是两个相同的字符)+单/零个字符

那么对于本题而言,我们只需要先统计所有字符数目,然后计算有多少个字符对。然后把字符串数组按照长度升序排序,然后贪心分配字符即可

时间复杂度:O(nlogn)

代码详解

class Solution {
public:int maxPalindromesAfterOperations(vector<string>& words) {int cnt[26]{0}, s = 0 ,res = 0, n = words.size(), ret = 0;for(auto& x : words)for(auto ch : x) cnt[ch - 'a']++;for(auto x : cnt) s += x / 2;sort(words.begin(), words.end(), [](string& x, string& y){return x.size() < y.size();});for(auto& x : words)if(s >= x.size() / 2) s -= x.size() / 2, ret++;else break;return ret;}
};

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

题目链接

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

题目描述

给你一个下标从 0 开始长度为 n 的整数数组 nums ,和一个下标从 0 开始长度为 m 的整数数组 pattern ,pattern 数组只包含整数 -1 ,0 和 1 。

大小为 m + 1 的

子数组

  nums[i..j] 如果对于每个元素  pattern[k] 都满足以下条件,那么我们说这个子数组匹配模式数组  pattern :
  • 如果 pattern[k] == 1 ,那么 nums[i + k + 1] > nums[i + k]
  • 如果 pattern[k] == 0 ,那么 nums[i + k + 1] == nums[i + k]
  • 如果 pattern[k] == -1 ,那么 nums[i + k + 1] < nums[i + k]

请你返回匹配 pattern 的 nums 子数组的 数目 。

接口描述

class Solution {
public:int countMatchingSubarrays(vector<int>& nums, vector<int>& pattern) {}
};

思路分析

和第一道方法一样

代码详解

class Solution
{
public:void get_nextval(const string &src, vector<int> &nextval){int j = 0, k = -1;nextval[0] = -1;while (j < (int)src.size() - 1){if (k == -1 || src[j] == src[k]){j++;k++;nextval[j] = k;}else{k = nextval[k];}}}int countMatchingSubarrays(vector<int> &nums, vector<int> &pattern){int n = nums.size(), m = pattern.size(), ret = 0;string a, b;for (int i = 0; i < n - 1; i ++)a.push_back(nums[i] == nums[i + 1] ? '0' : (nums[i] < nums[i + 1] ? '1' : '2'));for (auto x : pattern)b.push_back((~x) ? (x ^ 48) : '2');vector<int> next(m);get_nextval(b, next);for (int i = 0, j = 0; i < n - 1;){if (j == -1 || a[i] == b[j])i++, j++;elsej = next[j];if (j == m)i--, ret++, j = next[m - 1];}return ret;}
};

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

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

相关文章

qt-C++笔记之判断一个QLabel上有没有load图片

qt-C笔记之判断一个QLabel上有没有load图片 code review! 在Qt框架中&#xff0c;QLabel是用来显示文本或者图片的一个控件。如果你想判断一个QLabel控件上是否加载了图片&#xff0c;你可以检查它的pixmap属性。pixmap属性会返回一个QPixmap对象&#xff0c;如果没有图片被加…

error: object ‘FastMNNIntegration‘ not found

加载一个包即可 library(SeuratWrappers) #运行fastmnn之前&#xff0c;需要加载&#xff0c;否则报错 obj <- IntegrateLayers(object obj, method FastMNNIntegration,new.reduction "integrated.mnn",verbose FALSE )

C#系列-使用 Minio 做图片服务器实现图片上传 和下载(13)

1、Minio 服务器下载和安装 要在本地安装和运行 MinIO 服务器&#xff0c;你可以按照以下 步骤进行操作&#xff1a; 1. 访问 MinIO 的官方网站&#xff1a;https://min.io/&#xff0c;然后 点击页面上的”Download”按钮。 2. 在下载页面上&#xff0c;选择适合你操作系统的 …

什么是ZWDFS ?

1. 什么是ZWDFS? ZWDFS是ZeroWait DFS的缩写 &#xff0c;它的用途在于可以自动扫描并切换到最佳信道&#xff0c;避开WIFI拥挤的信道以及带来环境的信号干扰。 2. Maxlinear WAV600 ZWDFS详细说明. 5 GHz Wi-Fi 频谱包括动态频率选择 (DFS) 和非 DFS 信道。监管领域要求 D…

Docker 有哪些常见的用途?

Docker 是一种容器化技术&#xff0c;它允许应用程序在不同的环境之间具有一致的运行环境。这使得 Docker 在开发和运维领域中非常受欢迎&#xff0c;因为它简化了应用程序的部署和管理。以下是 Docker 的一些常见用途&#xff1a; 快速部署应用程序 Docker 允许开发人员和运…

Python for 循环

Python 中的 for 循环 Python 中的 for 循环是一个迭代函数。如果你有一个类似列表的序列对象&#xff0c;你可以使用 for 循环来迭代列表中包含的项目。 for 循环的功能与其他多个编程语言中看到的功能并没有太大的不同。 在本文中&#xff0c;我们将详细探讨 Python 中的 …

django中如何使用mysql连接池

一&#xff1a;介绍 在Django中使用MySQL时&#xff0c;通常情况下&#xff0c;Django的数据库层会为你管理数据库连接。Django的数据库接口是线程安全的&#xff0c;这意味着它会自动为每个线程创建和管理数据库连接。在大多数情况下&#xff0c;你不需要手动创建线程池来管理…

用数学思维去理解时间复杂度的计算

视频讲解过程 一.关于时间复杂度的数学理解 设要处理的数据总量为x,x足够大&#xff0c;为了某个目的&#xff1a;排序、查询、删除、添加之类&#xff0c;需要消耗的计算次数是y。则x和y存在以下关系&#xff1a; y ax b;(a是系数&#xff0c;b是常数) -------------------…

Hive窗口函数详解

一、 窗口函数知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路&#xff1a; LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowing…

【Android】使用Android Studio运行Hello World项目

文章目录 1. JDK的安装与配置2. Android Studio的安装3. 运行Hello World项目3.1 新建项目3.2 修改项目配置3.2.1 修改UI界面3.2.2 配置 Android SDK 3.3 添加并运行虚拟设备3.4 运行项目 1. JDK的安装与配置 想要使用Android Studio&#xff0c;必须先配置Java环境&#xff0…

最大字段和(洛谷)

题目 原题 题目描述 给出一个长度为 n n n 的序列 a a a&#xff0c;选出其中连续且非空的一段使得这段和最大。 输入格式 第一行是一个整数&#xff0c;表示序列的长度 n n n。 第二行有 n n n 个整数&#xff0c;第 i i i 个整数表示序列的第 i i i 个数字 a i a_i a…

使用 Express.js 和 MySQL 构建 Web 应用程序

Express.js 是一个流行的 Node.js Web 框架&#xff0c;而 MySQL 是一种广泛使用的关系型数据库。本文将介绍如何结合使用 Express.js 和 MySQL 构建功能强大的 Web 应用程序。 一、安装和设置 首先&#xff0c;确保您已经安装了 Node.js 和 MySQL。然后&#xff0c;通过以下…

hook函数——useRef

useRef useRef 是一个 React Hook&#xff0c;它能帮助引用一个不需要渲染的值。也就是说useRef可以存储一个值&#xff0c;但是不被组件渲染&#xff0c;仅仅只是引用&#xff0c;主要包括两个方面&#xff0c;例如使用ref引用一个值&#xff0c;使用ref引用一个dom节点&…

软件价值12-射箭游戏

射箭游戏&#xff0c;按空格键发射&#xff0c;打击移动靶&#xff0c;左上角显示成绩状态。 代码&#xff1a; import pygame import sys import random# 初始化Pygame pygame.init()# 设置窗口大小 SCREEN_WIDTH 800 SCREEN_HEIGHT 600 screen pygame.display.set_mode((…

golang 集成sentry:PostgreSQL

本文介绍通过 pgx库集成sentry&#xff0c; pgx 特点是速度快&#xff0c;可以完全控制&#xff0c;并且支持所有 postgres 数据类型。 pgx地址&#xff1a; https://github.com/jackc/pgx 最简单的接入方式是自定义一个logger&#xff0c; 然后注入到pgx&#xff0c; 完整示…

【Linux】信号概念与信号产生

信号概念与信号产生 一、初识信号1. 信号概念2. 前台进程和后台进程3. 认识信号4. 技术应用角度的信号 二、信号的产生1. 键盘组合键2. kill 命令3. 系统调用4. 异常&#xff08;1&#xff09;观察现象&#xff08;2&#xff09;理解本质 5. 软件条件闹钟 一、初识信号 1. 信号…

任务管理软件的实用价值及优选推荐:提升工作效率的利器

任务管理软件是一种用于组织任务、将任务分配给个人并监控其进展的软件。该软件可以帮助确保任务在预算内按时完成。它在协同工作环境中特别有用&#xff0c;在这种环境中多人在处理需要跟踪和监视的任务。无论是初创公司、中小型企业还是大型组织&#xff0c;都可以从任务管理…

【Linux】make和Makefile

目录 make和Makefile make和Makefile 我们使用vim编辑器的时候&#xff0c;在一个文件里写完代码要进行编译&#xff0c;要自己输入编译的指令。有没有一种可以进行自动化编译的方法——makefile文件&#xff0c;它可以指定具体的编译操作&#xff0c;写好makefile文件&#x…

电磁兼容故障整改-辐射发射超标

设备的辐射于扰发射超标有两种可能:一种是设备外壳的屏蔽性能不完善;另一种是射频干扰经由电源线和其他线缆逸出。判断方法是拔掉不必要的电线和电源插头&#xff0c;或者将电缆长度减小至最短&#xff0c;继续做试验&#xff0c;如果没有任何改善迹象&#xff0c;则应怀疑是设…

Peter算法小课堂—单调队列

祝大家新年快乐&#xff01; 今天这一次有点简单。 单调队列有两个要点&#xff0c;一个是单调&#xff0c;另一个就是我们的队列。 听到队列&#xff0c;我相信大家一定会想到它的好朋友BFS吧。但是……今天……可……没……那么……简单哦。 西佳佳偶像天团1 题目描述 …