LeetCode---383周赛

题目列表

3028. 边界上的蚂蚁

3029. 将单词恢复初始状态所需的最短时间 I

3030. 找出网格的区域平均强度

3031. 将单词恢复初始状态所需的最短时间 II

一、边界上的蚂蚁

这题没什么好说的,模拟就行,本质就是看前缀和有几个为0。

代码如下

class Solution {
public:int returnToBoundaryCount(vector<int>& nums) {int ans = 0, sum = 0;for(auto x:nums){sum += x;ans += sum==0;}return ans;}
};

 二、将单词恢复初始状态所需要的最短时间I&II

这题如果没有什么其他思路,我们直接暴力枚举也是可以直接过的(数据范围比较小),这里先写一个暴力的代码,下面会讲一个更快的方法

这题的本质其实就是判断特定长度的前后缀是否相同,这里我们直接暴力枚举一个个字符进行判断

代码如下

class Solution {
public:int minimumTimeToInitialState(string word, int k) {int n = word.size(), ans = 1;for(int i = k; i < n; i += k){bool flag = false;for(int j = 0;j < n - i; j++){if(word[j] != word[i+j]){flag = true;break;}}if(flag) ans++;else break;}return ans;}
};

那么如果数据范围变大(如下图),我们又该如何去做呢???(第四题) 

很显然,这题是关于字符串匹配的相关问题,很容易就能想到KMP算法,但是KMP的常规用法是用来求模式串在其他文本串中是否存在及其所匹配的子串的起始下标的,而这题只有一个字符串,且所求也不同,看着根本就没有任何关系,但是真的是这样吗?

(如果对KMP算法不了解,建议先去看一下这一篇文章:如何更好地理解和掌握 KMP 算法? - 知乎)

我们来想想kmp中有什么是只跟一个字符串有关系的?很显然是next数组,那么next数组的含义是什么?next[i] 表示以 i 为结尾的字符串的前缀和后缀的最大匹配字符串的长度。

比如 ababcabab的next数组为 0 0 1 2 1 1 2 3 4

在之前我就说过这题本质其实就是判断特定长度的前后缀是否相同,在结合next数组的含义,是不是已经有点感觉了?

但是还不够,根据目前的对next数组的理解,我们只能得到该字符串的前后缀最长匹配字符串的长度,但是这个不一定满足题目要求,所以我们需要枚举从大到小所有满足字符串前后缀匹配的长度,从而找到最小的操作次数,如何做?

如果我们想要得到次大的满足字符串前后缀匹配字符串的长度,该长度的字符串必然包含在最大长度的前后缀匹配的字符串中,举个例子,比如 ababcabab 这个字符串,next.back()=4,即 abab 这个字符串,那么次大的满足前后缀匹配的字符串必然在 abab 之中,即 ab,也就是 abab 这个字符串的最大前后缀匹配的字符串长度,所以次大的前后缀匹配字符长度为2,同理,我们能得到从大到小所有满足字符串前后缀匹配字符串的长度

代码如下

class Solution {
public:int minimumTimeToInitialState(string word, int k) {//kmp求next数组int n = word.size();int next[n];next[0]=0;for(int i=1,j=0;i<n;i++){while(j&&word[i]!=word[j])j=next[j-1];if(word[i]==word[j])j++;next[i]=j;}//从大到小枚举所有的前后缀匹配的字符串长度int res=next[n-1];while(res&&(n-res)%k!=0)res = next[res-1];if(res) return (n-res)/k;else return (n+k-1)/k;}
};

这里介绍另一种算法----z函数(又叫扩展kmp)----是之前暴力做法的优化

之前暴力做法浪费时间的地方在于每次判断前后缀是否匹配,都需要从头开始,但实际上前面匹配的信息能帮助我们跳过一些没有必要的比较

它的大体思路和kmp的思路是一样的,都是用空间去换取时间,用额外的空间去记录一些有用的信息,从而减少无用比较的次数,优化时间复杂度,有兴趣的可以去了解一下。

代码如下

class Solution {
public:int minimumTimeToInitialState(string word, int k) {int n = word.size();vector<int> z(n);int left = 0, right = 0;for(int i = 1; i < n; i++){if(i <= right)z[i] = min(z[i-left], right-i+1);while(i+z[i] < n && word[z[i]]==word[i+z[i]]){left = i;right = z[i]+i;z[i]++;}if(i%k==0&&z[i]==n-i)return i/k;}return (n+k-1)/k;}
};

三、找出网格的区域平均强度

读懂题目意思,直接模拟即可

代码如下

class Solution {
public:vector<vector<int>> resultGrid(vector<vector<int>>& image, int threshold) {int n = image.size(), m = image[0].size();vector<vector<int>> dp(n+1,vector<int>(m+1));for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){dp[i+1][j+1] = dp[i][j+1] + dp[i+1][j] + image[i][j] - dp[i][j];}}vector<vector<int>> v(n,vector<int>(m));auto t = v;for(int i = 0; i < n-2; i++){for(int j = 0; j < m-2; j++){bool ok = false;for(int k = i; k <= i+2; k++)if(abs(image[k][j]-image[k][j+1])>threshold || abs(image[k][j+1]-image[k][j+2])>threshold)ok = true;for(int k = j; k <= j+2; k++)if(abs(image[i][k]-image[i+1][k])>threshold || abs(image[i+1][k]-image[i+2][k])>threshold)ok = true;if(ok) continue;int sum = (dp[i+3][j+3] - dp[i+3][j] - dp[i][j+3] + dp[i][j])/9;for(int x = i; x <= i+2; x++){for(int y = j; y <= j+2; y++){t[x][y]++;v[x][y]+=sum;}}}}for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(t[i][j]) v[i][j]/=t[i][j];else v[i][j]=image[i][j];}}return v;}
};

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

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

相关文章

Spring Cloud Hystrix 参数配置、简单使用、DashBoard

Spring Cloud Hystrix 文章目录 Spring Cloud Hystrix一、Hystrix 服务降级二、Hystrix使用示例三、OpenFeign Hystrix四、Hystrix参数HystrixCommand.Setter核心参数Command PropertiesFallback降级配置Circuit Breaker 熔断器配置Metrix 健康统计配置Request Context 相关参数…

【java】12:封装

面向对象编程三大特征 1.基本介绍 面向对象编程有三大特征&#xff1a;封装、继承和多态。 2.封装介绍 封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作[方法]&am…

开局一个破碗的故事例子

在一个寒冷的冬日&#xff0c;一个瘦弱的小姑娘拿着一个破碗&#xff0c;孤独地走在被白雪覆盖的街道上。她的名字叫小梅&#xff0c;她的父母早逝&#xff0c;留下她一个人在这个世界上艰难地生活。 小梅的破碗里只有几个铜板&#xff0c;那是她前一天沿街乞讨所得&#xff0c…

林浩然与杨凌云的Java世界奇遇记:垃圾回收大冒险

林浩然与杨凌云的Java世界奇遇记&#xff1a;垃圾回收大冒险 The Java Adventure Chronicles of Lin Haoran and Yang Lingyun: Garbage Collection Odyssey 在一个充满0和1代码森林的世界里&#xff0c;住着两位勇敢的程序员侠侣——林浩然和杨凌云。林浩然是个身怀Java绝技的…

sheng的学习笔记-docker部署数据库oracle,mysql

部署目录&#xff1a;sheng的学习笔记-部署-目录-CSDN博客 docker基础知识可参考 sheng的学习笔记-docker部署&#xff0c;原理图&#xff0c;命令&#xff0c;用idea设置docker docker安装数据库 mac版本 安装oracle 下载oracle镜像 打开终端&#xff0c;输入 docker s…

Python网络通信

目录 基本的网络知识 TCP/IP IP地址 端口 HTTP/HTTPS HTTP HTTPS 搭建自己的Web服务器 urllib.request模块 发送GET请求 发送POST请求 JSON数据 JSON文档的结构 JSON数据的解码 下载图片示例 返回所有备忘录信息 此文章讲解如何通过Python访问互联网上的资源&a…

《CSS 简易速速上手小册》第7章:CSS 预处理器与框架(2024 最新版)

文章目录 7.1 Sass&#xff1a;更高效的 CSS 编写7.1.1 基础知识7.1.2 重点案例&#xff1a;主题颜色和字体管理7.1.3 拓展案例 1&#xff1a;响应式辅助类7.1.4 拓展案例 2&#xff1a;深色模式支持 7.2 Bootstrap&#xff1a;快速原型设计和开发7.2.1 基础知识7.2.2 重点案例…

ueransim关于ue侧nas层相关代码解读

一.在文件UERANSIM\UERANSIM-3.2.6\src\ue\nas中enc.cpp中完成了NAS&#xff08;非接入层&#xff09;信令的加密和解密是通过NAS_ENC模块实现的。NAS_ENC模块负责将NAS信令消息进行加密&#xff0c;以确保其传输过程中的安全性。 具体来说&#xff0c;当UE发送NAS信令消息时&…

零基础如何学习编曲,究竟需要准备什么?

初学者常常弄不清楚作曲和编曲的区别&#xff0c;在这里我为大家讲解一下两者的差别。狭义上来说&#xff1a;作曲可以理解为写旋律&#xff0c;而编曲就是写伴奏。那么接下来让我们一起看看零基础编曲&#xff0c;究竟需要准备些什么? 一、理论 众所周知,乐理是最基础的理论…

【JMX】JAVA监控的基石

目录 1.概述 2.MBean 2.1.Standard MBean 2.2.Dynamic MBean 2.3.Model Bean 2.4.Dynamic MBean和Model Bean的区别 2.5.MXBean 2.6.Open Bean 3.控制台 1.概述 什么是JMX&#xff0c;首先来看一段对话&#xff1a; Java Management Extensions&#xff08;JMX&#…

探索ChatGPT-4:智能会话的未来已来

深入了解ChatGPT-4&#xff1a;前沿AI的强大功能 ChatGPT-4是最先进的语言模型之一&#xff0c;由OpenAI开发&#xff0c;它在自然语言理解和生成方面的能力已经达到了新的高度。如今&#xff0c;ChatGPT-4已经被广泛应用于多个领域&#xff0c;从教育到企业&#xff0c;再到技…

Java学习第十一节之命令行传参和断更原因

package method;public class Demo03 {public static void main(String[] args) {//args.length数组长度for (int i 0; i < args.length; i) {System.out.println("args[" i "]:"args[i]);}}}为什么没更新了&#xff1f; 家里有长辈生病了不好在医院照…

【算法与数据结构】496、503、LeetCode下一个更大元素I II

文章目录 一、496、下一个更大元素 I二、503、下一个更大元素II三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、496、下一个更大元素 I 思路分析&#xff1a;本题思路和【算法与数据结构】739、LeetCode每日温度类似…

嵌入式硬件越老越吃香,确实没错!

不知不觉已经从事硬件设计7年多了&#xff0c;7年对于一个从事硬件设计来说能有几个完整的生涯。2016年毕业&#xff0c;2023年即将结束&#xff0c;我已经在汽车这行业“摸爬滚打”了7年的时光。 回顾这7年&#xff0c;自己真的成长了很多很多。有项目失败整改的经验收获&…

Linux进程间通信(IPC)

要想进程间通信&#xff0c;数据交换&#xff0c;必须通过内核&#xff1b; 一个进程将数据写到内核&#xff0c;然后另一个进程从内核读走数据。 IPC&#xff1a;进程间通信&#xff08;interprocess communication) 通信方式&#xff1a; 管道信号共享映射区&#xff08;…

假期day7

设计qq界面 代码 ui->lab1->setPixmap(QPixmap(":/pictrue/denglu.webp"));ui->lab1->setScaledContents(true);ui->lab2->setPixmap(QPixmap(":/pictrue/passwd.jpg"));ui->lab2->setScaledContents(true);ui->lab3->setP…

fast.ai 深度学习笔记(三)

深度学习 2&#xff1a;第 1 部分第 6 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-6-de70d626976c 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这…

监控概述、安装zabbix、配置zabbixagent、添加被控端主机、常用监控指标、自定义监控项

监控概述 对服务的管理&#xff0c;不能仅限于可用性。 还需要服务可以安全、稳定、高效地运行。 监控的目的&#xff1a;早发现、早治疗。 被监控的资源类型&#xff1a; 公开数据&#xff1a;对外开放的&#xff0c;不需要认证即可获取的数据私有数据&#xff1a;对外不开…

DRF 分页器的使用

drf提供了三个内置分页器&#xff0c;根据前端需求选择使用。 全局配置 在配置文件中设置全局的分页方式&#xff0c;如&#xff1a; REST_FRAMEWORK {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.PageNumberPagination,PAGE_SIZE: 100 # 每页数目 }也可通过继…

python coding with ChatGPT 打卡第20天| 二叉搜索树:搜索、验证、最小绝对差、众数

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…