Leetcode 3568. Minimum Moves to Clean the Classroom

  • Leetcode 3568. Minimum Moves to Clean the Classroom
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3568. Minimum Moves to Clean the Classroom

1. 解题思路

这一题我的核心思路就是广度优先遍历遍历+剪枝。

显然,我们可以给出一个广度优先遍历来给出所有可能的走法直至无法继续或者捡完所有垃圾。

但是,上述情况事实上可能会无限循环下去,而且所有的走法也非常浪费,因此,我们需要对其进行剪枝,从而优化我们的计算。

而这里,我的剪枝思路就是:

  • 如果一个点曾经走过,则当他重新回到这个点的时候,他必须满足以下两个条件之一,否则这条路线必然不会是最优的,可以直接忽略:
    • 他在中间的过程中捡过了新的垃圾;
    • 他在中间的过程中补充了能量(即回来时的能量值大于之前来的时候的能量值)

由此,我们就能对上述问题进行解答了。

2. 代码实现

给出python代码实现如下:

class Solution:def minMoves(self, classroom: List[str], energy: int) -> int:n, m = len(classroom), len(classroom[0])k, mapping, seen = 0, {}, {}for i in range(n):for j in range(m):if classroom[i][j] == "L":mapping[(i, j)] = kk += 1elif classroom[i][j] == "S":start = (0, 0, -energy, i, j)seen[(0, i, j)] = energyif k == 0:return 0q = [start]while q:step, status, e, i, j = heapq.heappop(q)status = -statuse = -eif status == (2**k)-1:return stepelif e <= 0:continueif i-1 >= 0 and classroom[i-1][j] != "X":new_status = status if classroom[i-1][j] != "L" else status | (1 << mapping[(i-1, j)])new_energy = e-1 if classroom[i-1][j] != "R" else energyif seen.get((new_status, i-1, j), -1) < new_energy:heapq.heappush(q, (step+1, -new_status, -new_energy, i-1, j))seen[(new_status, i-1, j)] = new_energyif i+1 < n and classroom[i+1][j] != "X":new_status = status if classroom[i+1][j] != "L" else status | (1 << mapping[(i+1, j)])new_energy = e-1 if classroom[i+1][j] != "R" else energyif seen.get((new_status, i+1, j), -1) < new_energy:heapq.heappush(q, (step+1, -new_status, -new_energy, i+1, j))seen[(new_status, i+1, j)] = new_energyif j-1 >= 0 and classroom[i][j-1] != "X":new_status = status if classroom[i][j-1] != "L" else status | (1 << mapping[(i, j-1)])new_energy = e-1 if classroom[i][j-1] != "R" else energyif seen.get((new_status, i, j-1), -1) < new_energy:heapq.heappush(q, (step+1, -new_status, -new_energy, i, j-1))seen[(new_status, i, j-1)] = new_energyif j+1 < m and classroom[i][j+1] != "X":new_status = status if classroom[i][j+1] != "L" else status | (1 << mapping[(i, j+1)])new_energy = e-1 if classroom[i][j+1] != "R" else energyif seen.get((new_status, i, j+1), -1) < new_energy:heapq.heappush(q, (step+1, -new_status, -new_energy, i, j+1))seen[(new_status, i, j+1)] = new_energyreturn -1

提交代码评测得到:耗时3097ms,占用内存58.28MB。

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

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

相关文章

Spring Boot,注解,@RestController

RestController 是 Spring MVC 中用于创建 RESTful Web 服务的核心注解。 RestController 核心知识点 REST 作用: RestController 是一个方便的组合注解&#xff0c;它结合了 Controller 和 ResponseBody 两个注解。 Controller: 将类标记为一个控制器&#xff0c;使其能够处理…

【计算机网络】Linux下简单的UDP服务器(超详细)

套接字接口 我们把服务器封装成一个类&#xff0c;当我们定义出一个服务器对象后需要马上初始化服务器&#xff0c;而初始化服务器需要做的第一件事就是创建套接字。 &#x1f30e;socket函数 这是Linux中创建套接字的系统调用,函数原型如下: int socket(int domain, int typ…

Fashion-MNIST LeNet训练

前面使用线性神经网络softmax 和 多层感知机进行图像分类&#xff0c;本次我们使用LeNet 卷积神经网络进行 训练&#xff0c;期望能捕捉到图像中的图像结构信息&#xff0c;提高识别精度&#xff1a; import torch import torchvision from torchvision import transforms f…

EasyRTC嵌入式音视频通信SDK助力1v1实时音视频通话全场景应用

一、方案概述​ 在数字化通信需求日益增长的今天&#xff0c;EasyRTC作为一款全平台互通的实时视频通话方案&#xff0c;实现了设备与平台间的跨端连接。它支持微信小程序、APP、PC客户端等多端协同&#xff0c;开发者通过该方案可快速搭建1v1实时音视频通信系统&#xff0c;适…

查看make命令执行后涉及的预编译宏定义的值

要查看 make 命令执行后涉及的预编译宏定义&#xff08;如 -D 定义的宏&#xff09;及其值&#xff0c;可以采用以下方法&#xff1a; 1. 查看 Makefile 中的宏定义 直接检查 Makefile 或相关构建脚本&#xff08;如 configure、CMakeLists.txt&#xff09;&#xff0c;寻找 -…

【C/C++】面试常考题目

面试中最常考的数据结构与算法题&#xff0c;适合作为刷题的第一阶段重点。 ✅ 分类 & 推荐题目列表&#xff08;精选 70 道核心题&#xff09; 一、数组 & 字符串&#xff08;共 15 题&#xff09; 题目类型LeetCode编号两数之和哈希表#1盛最多水的容器双指针#11三数…

【芯片学习】555

一、引脚作用 二、原理图 三、等效原理图 1.比较器 同相输入端大于反相输入端&#xff0c;输出高电平&#xff0c;反之亦然 2.三极管 给它输入高电平就可以导通 3.模拟电路部分 4.数字电路部分 这部分的核心是RS触发器&#xff0c;R-reset代表0&#xff0c;set是置位代表1&am…

Linux《文件系统》

在之前的系统IO当中已经了解了“内存”级别的文件操作&#xff0c;了解了文件描述符、重定向、缓冲区等概念&#xff0c;在了解了这些的知识之后还封装出了我们自己的libc库。接下来在本篇当中将会将视角从内存转向磁盘&#xff0c;研究文件在内存当中是如何进行存储的&#xf…

Java-代码段-http接口调用自身服务中的其他http接口(mock)-并建立socket连接发送和接收报文实例

最新版本更新 https://code.jiangjiesheng.cn/article/367?fromcsdn 推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》 1. controller入口 ApiOperation("模拟平台端现场机socket交互过程,需要Authorization")PostMapping(path "/testS…

基于递归思想的系统架构图自动化生成实践

文章目录 一、核心思想解析二、关键技术实现1. 动态布局算法2. 样式规范集成3. MCP服务封装三、典型应用场景四、最佳实践建议五、扩展方向一、核心思想解析 本系统通过递归算法实现了Markdown层级结构到PPTX架构图的自动转换,其核心设计思想包含两个维度: 数据结构递归:将…

Python包管理器 uv替代conda?

有人问&#xff1a;python的包管理器uv可以替代conda吗? 搞数据和算法的把conda当宝贝&#xff0c;其他的场景能替代。 Python的包管理器有很多&#xff0c;pip是原配&#xff0c;uv是后起之秀&#xff0c;conda则主打数据科学。 uv替代pip似乎只是时间问题了&#xff0c;它…

使用pnpm、vite搭建Phaserjs的开发环境

首先&#xff0c;确保你已经安装了 Node.js 和 npm。然后按照以下步骤操作&#xff1a; 一、使用pnpm初始化一个新的 Vite 项目 pnpm create vite 输入名字 选择模板&#xff0c;这里我选择Vanilla,也可以选择其他的比如vue 选择语言 项目新建完成 二、安装相关依赖 进入项…

JS逆向案例—喜马拉雅xm-sign详情页爬取

JS逆向案例——喜马拉雅xm-sign详情页爬取 声明网站流程分析总结 声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&am…

姜老师的MBTI课程:MBTI是可以转变的

我们先来看内向和外向这条轴&#xff0c;I和E内向和外向受先天遗传因素的影响还是比较大的&#xff0c;因为它事关到了你的硬件&#xff0c;也就是大脑的模型。但是我们在大五人格的排雷避坑和这套课程里面都强调了一个观点&#xff0c;内向和外向各有优势&#xff0c;也各有不…

进程同步:生产者-消费者 题目

正确答案&#xff1a; 问题类型&#xff1a; 经典生产者 - 消费者问题 同时涉及同步和互斥。 同步&#xff1a;生产者与消费者通过信号量协调生产 / 消费节奏&#xff08;如缓冲区满时生产者等待&#xff0c;空时消费者等待&#xff09;。互斥&#xff1a;对共享缓冲区的访问需…

吴恩达MCP课程(1):chat_bot

原课程代码是用Anthropic写的&#xff0c;下面代码是用OpenAI改写的&#xff0c;模型则用阿里巴巴的模型做测试 .env 文件为&#xff1a; OPENAI_API_KEYsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx OPENAI_API_BASEhttps://dashscope.aliyuncs.com/compatible-mode…

Netty 实战篇:手写一个轻量级 RPC 框架原型

本文将基于前文实现的编解码与心跳机制&#xff0c;构建一个简单的 RPC 框架&#xff0c;包括请求封装、响应解析、动态代理调用。为打造微服务通信基础打下基础。 一、什么是 RPC&#xff1f; RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;允许…

边缘计算新基建:iVX 轻量生成模块的 ARM 架构突围

一、引言 随着工业 4.0 和物联网的快速发展&#xff0c;边缘计算作为连接云端与终端设备的关键技术&#xff0c;正成为推动数字化转型的核心力量。在边缘计算场景中&#xff0c;设备的实时性、低功耗和离线处理能力至关重要。ARM 架构凭借其低功耗、高能效的特点&#xff0c;成…

C# 基于 Windows 系统与 Visual Studio 2017 的 Messenger 消息传递机制详解:发布-订阅模式实现

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

js数据类型有哪些?它们有什么区别?

js数据类型共有8种,分别是undefined,null,boolean,number,string,Object,symbol,bigint symbol和bigint是es6中提出来的数据类型 symbol创建后独一无二不可变的数据类型,它主要是为了解决出现全局变量冲突的问题 bigint 是一种数字类型的数据,它可以表示任意精度格式的整数,…