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子网格内的result
                for (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.mfbz.cn/a/374824.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百面嵌入式专栏(面试题)内存管理相关面试题1.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍内存管理相关面试题 。 一、内存管理相关面试题 page数据结构中的_refcount和_mapcount有什么区别?匿名页面和高速缓存页面有什么区别?page数据结构中有一个锁,我们称为页锁,请问trylock_page()和loc…

20240206三次握手四次挥手

TCP和UDP异同点 相同点&#xff1a;同属于传输层的协议 不同点&#xff1a; TCP ----> 稳定 1> 提供面向连接的&#xff0c;可靠的数据传输服务 2> 传输过程中&#xff0c;数据无误、数据无丢失、数据无失序、数据无重复 1、TCP会给每个数据包编上编号&#xff…

HGAME 2024 WEEK1 WP

文章目录 WEBezHTTPBypass itSelect Courses2048*16jhat REezASMezPYCezUPXezIDA PWNEzSignIn CRYPTO奇怪的图片ezRSAezMathezPRNG MISCSignIn来自星尘的问候simple_attack希儿希儿希尔签到 放假比较闲&#xff0c;打打比赛 WEB ezHTTP 来自vidar.club、UA要求阿巴阿巴阿巴…

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

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

“SET key value [EX seconds] [PX milliseconds] [NX|XX]“和redis分布式锁

一、可选参数介绍 EX second &#xff1a;设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。PX millisecond &#xff1a;设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key milliseco…

【QT】VS-code报错:LNK2019: 无法解析的外部符号

目录 0.环境 1.问题简述 2.分析报错原因 3.解决方法 1&#xff09;set() 相关语句 2&#xff09;target_link_libraries() 相关语句 4.参考 0.环境 windows11 、 vs-code 、 qt 、 c、编译器为vs2019-x86_amd64 1.问题简述 项目编译release版本时会报错&#xff1a;报错…

代码随想录算法训练营第十四天 | 110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

代码随想录算法训练营第十四天 | 110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和 文章目录 代码随想录算法训练营第十四天 | 110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和1 LeetCode 110.平衡二叉树2 LeetCode 257.二叉树的所有路径3 LeetCode 404.左叶子之和…

浅析一款非驱动考试网关程序(一)

前言 监考程序需要对网络流量进行过滤&#xff0c;不允许除了考试网站以外的其他网站的访问。其实就是实现了一个小型的网关程序&#xff0c;一般地有驱动实现和非驱动实现两种方式。本文只针对一款简易的非驱动实现的监考程序进行分析。 注意&#xff1a;本文通过对某考试监…

第十篇【传奇开心果系列】Python的OpenCV技术点案例示例:图像分割

传奇开心果短博文系列 系列短博文目录Python的OpenCV技术点案例示例系列短博文目录一、前言二、OpenCV图像分割介绍三、OpenCV分割算法示例代码四、归纳总结系列短博文目录 Python的OpenCV技术点案例示例系列 短博文目录 一、前言 OpenCV是一个广泛应用于计算机视觉和图像处…

2023年09月CCF-GESP编程能力等级认证Python编程五级真题解析

Python等级认证GESP(1~6级)全部真题・点这里 一、单选题(共15题,共30分) 第1题 近年来,线上授课变得普遍,很多有助于改善教学效果的设备也逐渐流行,其中包括比较常用的手写板,那么它属于哪类设备?( ) A:输入 B:输出 C:控制 D:记录 答案:A 第2题 以下关于…

计算机服务器中了mkp勒索病毒如何解密,mkp勒索病毒解密流程

随着网络技术的不断发展与应用&#xff0c;越来越多的企业走向数字化办公模式&#xff0c;计算机极大地方便了企业的正常生产运营&#xff0c;但网络威胁的手段也不断增加。近期&#xff0c;云天数据恢复接到很多企业的求助&#xff0c;企业的计算机服务器遭到了mkp勒索病毒攻击…

Qt 常见容器类用法(一)

目录 QMap类 QHash类 QVector类 QMap类 QMap<key,T>提供一个从类型为Key的键到类型为T的值的映射。通常&#xff0c;QMap存储的数据形式是一个键对应一个值&#xff0c;并且按照键Key的次序存储数据。为了能够支持一键多值的情况&#xff0c;QMap提供QMap<key,T&g…

相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

MPLS——多协议标签交换

目录 1 多协议标签交换 MPLS 1.1 MPLS 的工作原理 1.1.1 MPLS 工作特点 1.1.2 MPLS 协议的基本原理 1.1.3 MPLS 的基本工作过程 1.2 转发等价类 FEC 1.2.1 FEC 用于负载平衡 1.3 MPLS 首部的位置与格式 1.3.1 MPLS 首部的位置 1.3.2 MPLS 首部的格式 1.4 新一代的…

Jmeter 示例,格式为001-100,按顺序生成三位数的函数

1.先添加一个循环控制器&#xff0c;每次执行生成一个数, 2.添加一个beanshell Sample,编写代码,把按00X这个格式的数字&#xff0c;赋值给一个变量LoopCount // 从JMeter变量中获取当前的计数器值 String loopCountStr vars.get("LoopCount"); int loopCount (lo…

1896_Linux中free命令小结

1896_Linux中free命令小结 全部学习汇总&#xff1a; little_bits_of_linux: 一星半点的Linux经验 (gitee.com) 查看Linux中存储的使用情况&#xff0c;我经常使用htop&#xff0c;毕竟这个命令提供的信息是十分直观的。我现在常用的一个小主机其实是我的树莓派3B&#xff0c;虽…

ETL是什么,有哪些ETL工具?就业前景如何?

ETL是什么 ETL&#xff08;Extract-Transform-Load&#xff09;&#xff0c;用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目标端的过程。ETL一词较常用在数据仓库&#xff0c;但其对象并不限于数据仓库。它可以自动化数据处理过程&#xff0c;减少…

C#向数组指定索引位置插入新的元素值:自定义插入方法 vs List<T>.Add(T) 方法

目录 一、使用的方法 1.自定义插入方法 2.使用List.Add(T) 方法 二、实例 1.示例1&#xff1a;List.Add(T) 方法 2.示例&#xff1a;自定义插入方法 一、使用的方法 1.自定义插入方法 首先需要定义一个一维数组&#xff0c;然后修改数组的长度(这里使用Length属性获取…

正点原子--STM32基本定时器学习笔记(1)

这部分是笔者对基本定时器的理论知识进行学习与总结&#xff01;主要记录学习过程中遇到的重难点&#xff0c;其他一些基础点就一笔带过了&#xff01; 1. 定时器概述 1.1 软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xff08;延时&#xff0…

C++ 动态规划 状态压缩DP 蒙德里安的梦想

求把 NM 的棋盘分割成若干个 12 的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0c;M4 时&#xff0c;共有 5 种方案。当 N2&#xff0c;M3 时&#xff0c;共有 3 种方案。 如下图所示&#xff1a; 2411_1.jpg 输入格式 输入包含多组测试用例。 每组测试用例占一行…
最新文章