Leetcode第383场周赛

news2024/11/17 15:37:15

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

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.coloradmin.cn/o/1438291.html

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

相关文章

控价新规要及时了解

控价工作的开展&#xff0c;除了依托品牌本身的规则&#xff0c;还要依赖一些外部能力的赋能&#xff0c;如对数据的监测&#xff0c;这个可以依靠人工实现&#xff0c;也可以利用数据监测系统去完成&#xff0c;或者是对破价链接的治理&#xff0c;虽然品牌多利用知识产权进行…

视频上传 - 断点续传那点事

在上一篇文章中&#xff0c;我们讲解了分片上传的实现方式。在讲解断点续传之前&#xff0c;我要把上篇文章中留下的问题讲解一下。读过上一篇文章的小伙伴们都知道&#xff0c;对于分片上传来说&#xff0c;它的传输方式分为2种&#xff0c;一种是按顺序传输&#xff0c;一种是…

工业级加固平板丨亿道三防平板电脑丨安卓工业平板丨改善车队管理

在现代物流和运输行业中&#xff0c;车队管理是一个复杂而重要的任务。为了更好地管理车队&#xff0c;提高工作效率和减少成本&#xff0c;许多企业正在采用新技术和工具。其中&#xff0c;三防平板电脑作为一种功能强大且适应恶劣环境的设备&#xff0c;已经在车队管理中得到…

ShardingSphere实现openGauss分布式架构

本文档采用openGauss结合ShardingSphere中间件的架构&#xff0c;实现openGauss数据库分布式OLAP场景的环境部署。 术语说明&#xff1a; 开源数据库引擎&#xff1a;openGauss shardingsphere Proxy&#xff1a;定位为透明化的数据库代理端&#xff0c;提供封装了数据库二进…

飞天使-k8s知识点16-kubernetes实操1-pod

文章目录 深入Pod 创建Pod&#xff1a;配置文件详解写个pod的yaml 文件深入Pod 探针&#xff1a;探针技术详解 深入Pod 创建Pod&#xff1a;配置文件详解 资源清单参考链接&#xff1a;https://juejin.cn/post/6844904078909128712写个pod的yaml 文件 apiVersion: v1 kind: P…

UE4运用C++和框架开发坦克大战教程笔记(十八)(第55~57集)

UE4运用C和框架开发坦克大战教程笔记&#xff08;十八&#xff09;&#xff08;第55~57集&#xff09; 55. UI 进入退出动画HideOther 面板出现时隐藏其他面板添加面板出现和收起的动画效果编写遮罩管理器前的准备 56. 弹窗进入界面57. UI 显示隐藏与遮罩转移完善遮罩管理器 55…

DolphinScheduler本地安装

文章目录 前言1. 安装部署DolphinScheduler1.1 启动服务 2. 登录DolphinScheduler界面3. 安装内网穿透工具4. 配置Dolphin Scheduler公网地址5. 固定DolphinScheduler公网地址 前言 本篇教程和大家分享一下DolphinScheduler的安装部署及如何实现公网远程访问&#xff0c;结合内…

mysql入门到精通006-基础篇-多表查询

1、多表关系介绍 1.1 概念 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求和业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在各种联系&#xff0c;基本上分为3种&#xf…

实战分享:SpringBoot在创新创业项目管理中的应用

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【漏洞复现】斐讯FIR151M路由器未授权下载漏洞

Nx01 产品简介 斐讯数据通信技术有限公司成立于2009年&#xff0c;是为用户提供智慧家庭领域智能产品和云服务的科技创新性企业。 Nx02 漏洞描述 斐讯 FIR151M路由器配置文件未授权下载漏洞,攻击者可利用该漏洞获取敏感信息。 Nx03 产品主页 fofa-query: app"PHICOMM-F…

索引失效问题

1、 like 以%开头&#xff0c;索引无效&#xff1b;当like前缀没有%&#xff0c;后缀有%时&#xff0c;索引有效。 &#xff08;1&#xff09;创建索引 create index text1 on emp(name); &#xff08;2&#xff09;不走索引 EXPLAIN select id,name,age,workno from emp wh…

人工智能基础部分24-人工智能的数学基础,汇集了人工智能数学知识最全面的概况

、 大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能基础部分24-人工智能的数学基础&#xff0c;汇集了人工智能数学知识最全面的概况&#xff0c;深度学习是一种利用多层神经网络对数据进行特征学习和表示学习的机器学习方法。要全面了解深度学习的数学基…

【Linux】环境基础开发工具的使用之gdb详解(三)

前言&#xff1a;上一篇文章中我们讲解了Linux下的gcc与g的使用&#xff0c;今天我们将进一步的学习gdb与makefile来帮我们更好的理解与使用基础开发工具。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的深度刨析 &#x1f448; …

LabVIEW多任务实时测控系统

LabVIEW多任务实时测控系统 面对现代化工业生产的复杂性和多变性&#xff0c;传统的测控系统已难以满足高效、精准、可靠的监控和控制需求。因此&#xff0c;开发一种基于LabVIEW的智能测控系统&#xff0c;能够提高生产效率&#xff0c;保证生产安全&#xff0c;是解决现代工…

echart - 柱状图添加阴影

有两种方法可以达到这个效果&#xff1a; 1. type: ‘shadow’ tooltip: {trigger: axis,axisPointer: {type: shadow,shadowStyle: {color: #FD8F67,opacity: 0.1,},},},2. type: ‘line’ 用这个方法可以改变阴影的宽度 tooltip: {trigger: axis,axisPointer: {type: li…

数据结构——D/二叉树

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.树概念及结构 1.1树的概念 树是一种非线性的…

S3 Browser工具得使用

新增账号 如果需要设置签名得版本&#xff0c;选择上图右下角得advanced setting

【C#】.net core 6.0 设置根目录下某个文件夹可访问,访问创建的图片等资源

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

linux 06 磁盘管理

01.先管理vm中的磁盘&#xff0c;添加一个磁盘 第一步.vm软件&#xff0c;打开虚拟机设置&#xff0c;添加硬盘 第二步.选择推荐scsi 第三步.创建一个新的虚拟磁盘 第四步. 第五步. 02.在创建好的vm虚拟机中查看刚才创建的磁盘 在centos中/dev 目录是设备目录 sda是磁盘…

开关电源学习之Boost电路

如果我们需要给一个输入电压为5V的芯片供电&#xff0c;而我们只有一个3.3V的电源&#xff0c;那怎么办&#xff1f; 我们能不能把3.3V的电压升到5V&#xff1f; 一、电感的简介 而在升压的电路设计方案中&#xff0c;使用到一个重要的元器件&#xff1a;电感。 电感的特性…