Leetcode第383场周赛

在这里插入图片描述
在这里插入图片描述

Leetcode第383场周赛

本人水平有限,只做前3道。
一、边界上的蚂蚁

边界上有一只蚂蚁,它有时向 左 走,有时向 右 走。

给你一个 非零 整数数组 nums 。蚂蚁会按顺序读取 nums 中的元素,从第一个元素开始直到结束。每一步,蚂蚁会根据当前元素的值移动:

如果 nums[i] < 0 ,向 左 移动 -nums[i]单位。
如果 nums[i] > 0 ,向 右 移动 nums[i]单位。
返回蚂蚁 返回 到边界上的次数。

注意:

边界两侧有无限的空间。
只有在蚂蚁移动了 |nums[i]| 单位后才检查它是否位于边界上。换句话说,如果蚂蚁只是在移动过程中穿过了边界,则不会计算在内。

解题思路

找到数组累加和=0的次数

代码
class Solution {public int returnToBoundaryCount(int[] nums) {int rec = 0,cnt = 0;for(int num:nums){rec += num;if(rec==0){cnt++;}}return cnt;}
}
二、找出网格的区域平均强度

给你一个下标从 0 开始、大小为 m x n 的网格 image ,表示一个灰度图像,其中 image[i][j] 表示在范围 [0…255] 内的某个像素强度。另给你一个 非负 整数 threshold 。

如果 image[a][b] 和 image[c][d] 满足 |a - c| + |b - d| == 1 ,则称这两个像素是 相邻像素 。

区域 是一个 3 x 3 的子网格,且满足区域中任意两个 相邻 像素之间,像素强度的 绝对差 小于或等于 threshold 。

区域 内的所有像素都认为属于该区域,而一个像素 可以 属于 多个 区域。

你需要计算一个下标从 0 开始、大小为 m x n 的网格 result ,其中 result[i][j] 是 image[i][j] 所属区域的 平均 强度,向下取整 到最接近的整数。如果 image[i][j] 属于多个区域,result[i][j] 是这些区域的 “取整后的平均强度” 的 平均值,也 向下取整 到最接近的整数。如果 image[i][j] 不属于任何区域,则 result[i][j] 等于 image[i][j] 。

返回网格 result 。

在这里插入图片描述
在这里插入图片描述

解题思路

这道题考阅读理解。

  1. 相邻像素:如果两个像素在网格中水平或垂直相邻(即它们的位置之差的和为1),它们被认为是相邻像素。
  2. 区域定义:一个区域是一个 3x3 的子网格,其中任意两个相邻像素的强度之差的绝对值都不超过给定的阈值(threshold)。这意味着,在一个区域内,所有相邻像素的强度都相似。
  3. 区域的平均强度:计算一个区域内所有像素强度的平均值。如果一个像素属于多个区域,则需要计算这些区域的平均强度的平均值。在这个计算过程中,所有的平均值都需要向下取整到最接近的整数。
  4. result网格:对于image中的每个像素,result中的对应像素应该是该像素所属区域的平均强度。如果一个像素属于多个区域,则取这些区域的平均强度的平均值(都进行向下取整)如果一个像素不属于任何区域,则result中的对应像素的值等于image中的原始像素值。
    从本质上讲,这个任务是在对图像进行一种特定的平滑处理,其中“平滑”的程度由阈值threshold控制,只有当一个区域内的像素强度变化在threshold定义的范围内时,这些像素的强度才会被平均。

解题思路如下:

  1. 遍历所有3x3的子网格。
  2. 遍历网格中所有相邻像素(即左右相邻或上下相邻),如果存在差值大于threshold的情况,则遍历下一个子网格。
  3. 如果合法,计算子网格中的平均值avg,等于子网格中的像素值和/9。
  4. 更新子网格内的result[i][j],我们先将avg加到result[i][j]中,同时,我们还需要一个矩阵cnt[i][j]记录image[i][j]在几个子网格中。
  5. 如果cnt[i][j]=0,那么result[i][j]=avg。否则,result[i][j]=result[i][j]/cnt[i][j](每次result[i][j]+avg,cnt[i][j]+1)。
代码
class Solution {public int[][] resultGrid(int[][] image, int threshold) {int m = image.length;int n = image[0].length;int[][] result = new int[m][n];// 结果数组int[][] cnt = new int[m][n];// 存储image[i][j]在子网格中出现的次数for (int i = 2; i < m; i++) {next:for (int j = 2; j < n; j++) {// 检查左右相邻格子for (int x = i-2; x <= i; x++) {if(Math.abs(image[x][j-2] - image[x][j-1]) > threshold || Math.abs(image[x][j-1] - image[x][j]) > threshold){continue next;   }}// 检查上下相邻格子for (int y = j-2; y <= j; y++) {if(Math.abs(image[i-2][y] - image[i-1][y]) > threshold || Math.abs(image[i-1][y] - image[i][y]) > threshold){continue next;}}// 合法,计算3x3子网格的平均值int avg = 0;for (int x = i-2; x <= i; x++) {for (int y = j-2; y <= j; y++) {avg += image[x][y];}}avg /= 9;// 更新3x3子网格内的resultfor (int x = i-2; x <= i; x++) {for (int y = j-2; y <= j; y++) {result[x][y] += avg;cnt[x][y] ++;}}}}for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if(cnt[i][j] == 0){result[i][j] = image[i][j];}else{result[i][j] /= cnt[i][j];}}}return result;}
}
三、将单词恢复初始状态所需的最短时间I

给你一个下标从 0 开始的字符串 word 和一个整数 k 。

在每一秒,你必须执行以下操作:

移除 word 的前 k 个字符。
在 word 的末尾添加 k 个任意字符。
注意 添加的字符不必和移除的字符相同。但是,必须在每一秒钟都执行 两种 操作。

返回将 word 恢复到其 初始 状态所需的 最短 时间(该时间必须大于零)。

示例 1:

输入:word = “abacaba”, k = 3
输出:2
解释:
第 1 秒,移除 word 的前缀 “aba”,并在末尾添加 “bac” 。因此,word 变为 “cababac”。
第 2 秒,移除 word 的前缀 “cab”,并在末尾添加 “aba” 。因此,word 变为 “abacaba” 并恢复到始状态。
可以证明,2 秒是 word 恢复到其初始状态所需的最短时间。
示例 2:

输入:word = “abacaba”, k = 4
输出:1
解释:
第 1 秒,移除 word 的前缀 “abac”,并在末尾添加 “caba” 。因此,word 变为 “abacaba” 并恢复到初始状态。
可以证明,1 秒是 word 恢复到其初始状态所需的最短时间。
示例 3:

输入:word = “abcbabcd”, k = 2
输出:4
解释:
每一秒,我们都移除 word 的前 2 个字符,并在 word 末尾添加相同的字符。
4 秒后,word 变为 “abcbabcd” 并恢复到初始状态。
可以证明,4 秒是 word 恢复到其初始状态所需的最短时间。

解题思路

在每次循环中,从 k 的位置开始提取字符串,直到字符串的末尾存储到cWord中,cWord表示原始word去除前k个字符后的结果。
然后,检查cWord是否可以做原始word的前缀。(即cWord与原始word中长度相等的前缀相同)
如果在任何时刻,cWord可以做原始word前缀,这意味着你可以通过在下一次操作中添加相应的字符来恢复 word 到其初始状态。因此,增加time计数器并退出循环。如果cWord不可以做原始word前缀,则增加time计数器并继续循环,如果同时发现cWord的长度小于k,则说明下一次操作后必定可以使word恢复到原始状态(因为等同于所有字符都进行替换,所以必定有一种可能使其恢复到原始状态),则增加time计数器并继续循环。

代码
class Solution {public int minimumTimeToInitialState(String word, int k) {int time = 0;String cWord = word;while (true) {cWord = cWord.substring(k);if(word.substring(0,cWord.length()).equals(cWord)){time++;break;}else{time++;if(cWord.length()<k){time++;break;}}}return time;}
}

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

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

相关文章

Unity类银河恶魔城学习记录1-14 AttackDirection源代码 P41

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerPrimaryAttackState.cs using System.Collections; using System.Co…

新增同步管理、操作日志模块,支持公共链接分享,DataEase开源数据可视化分析平台v2.3.0发布

2024年2月5日&#xff0c;DataEase开源数据可视化分析平台正式发布v2.3.0版本。 这一版本的功能升级包括&#xff1a;新增“同步管理”功能模块&#xff0c;用户可通过此模块&#xff0c;将传统数据库中的数据定时同步到Apache Doris中&#xff0c;让数据分析更快速&#xff1…

跟着cherno手搓游戏引擎【21】shaderLibrary(shader管理类)

前置&#xff1a; ytpch.h&#xff1a; #pragma once #include<iostream> #include<memory> #include<utility> #include<algorithm> #include<functional> #include<string> #include<vector> #include<unordered_map> #in…

#Z2322. 买保险

一.题目 二.思路 1.暴力 训练的时候&#xff0c;初看这道题&#xff0c;这不就打个暴力吗&#xff1f; 2.暴力代码 #include<bits/stdc.h> #define int long long using namespace std; int n,m,fa,x,y,vis[1000001],ans; vector<int> vec[1000001]; void dfs(i…

图数据库neo4j入门

neo4j 一、安装二、简单操作<一>、创建<二>、查询<三>、关系<四>、修改<五>、删除 三、常见报错<一>、默认的数据库密码是neo4j,打开浏览器http://localhost:7474登录不上,报错: Neo.ClientError.Security.Unauthorized: The client is un…

QMUI_Android:提升Android开发效率与质量的利器

QMUI_Android&#xff1a;提升Android开发效率与质量的利器 在Android应用开发过程中&#xff0c;开发者常常面临着重复编写基础组件和处理兼容性问题的挑战&#xff0c;这不仅耗费时间&#xff0c;也降低了开发效率。为了解决这一问题&#xff0c;Tencent推出了QMUI_Android框…

小白水平理解面试经典题目LeetCode 20. Valid Parentheses【栈】

20.有效括号 小白渣翻译 给定一个仅包含字符 ‘(’ 、 ‘)’ 、 ‘{’ 、 ‘}’ 、 ‘[’ 和 ‘]’ &#xff0c;判断输入字符串是否有效。 输入字符串在以下情况下有效&#xff1a; 左括号必须由相同类型的括号封闭。 左括号必须按正确的顺序关闭。 每个右括号都有一个对…

【华为 ICT HCIA eNSP 习题汇总】——题目集12

1、企业网络内部常常采用私有 IP 地址进行通信&#xff0c;以下哪个地址属于私有 IP 地址&#xff1f; A、0.1.1.1 B、127.5.4.3 C、128.0.0.5 D、172.24.35.36 考点&#xff1a;网络层 解析&#xff1a;&#xff08;D&#xff09; A类 IP 地址中&#xff0c;10.0.0.0 ~ 10.255…

SM2259XT量产工具修复金泰克固态硬盘29F01T2ALCQJ1颗粒开卡

在这里插入代码片前言 网心云用的固态硬盘突然坏了识别不了&#xff0c;磁盘管理、diskGenius、pe系统里均无法识别&#xff0c;查询发现可以用开卡工具修复&#xff0c;遂进行了一番折腾。 拆硬盘 如图硬盘是块金泰克240g容量的&#xff0c;拆开后找到主控芯片型号为SM2259…

踩坑了,MySQL数据库生成大量奇怪的大文件

作者&#xff1a;田逸&#xff08;formyz&#xff09; 一大早就收到某个数据库服务器磁盘满的报警信息&#xff0c;其中数据盘使用率超过90%&#xff0c;如下图所示。 这是一台刚上线不久的MySQL从库服务器&#xff0c;数据盘的总容量是300G。先登录系统&#xff0c;查看主从同…

PyTorch的10个基本张量操作

PyTorch是一个基于python的科学计算包。它的灵活性允许轻松集成新的数据类型和算法&#xff0c;并且框架也是高效和可扩展的&#xff0c;下面我们将介绍一些Pytorch的基本张量操作。 Tensors 张量Tensors是一个向量&#xff0c;矩阵或任何n维数组。这是深度学习的基本数据结构…

Android meminfo 查看方法及解析

目录 Android 上查看memory 信息的方法 内存限制的信息 手动释放缓存 例 adb shell dumpsys meminfo pid 解析 adb shell dumpsys meminfo 汇总信息说明 Total RAM Free RAM ION Used RAM Lost RAM ZRAM /proc/meminfo 参考文档 Android 上查看memory 信息的方法 …