当前位置: 首页 > news >正文

Leetcode 3661. Maximum Walls Destroyed by Robots

  • Leetcode 3661. Maximum Walls Destroyed by Robots
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3661. Maximum Walls Destroyed by Robots

1. 解题思路

这一题思路上就是一个动态规划+分类讨论的思路。

我们首先将所有的机器人以及墙壁位置顺序排列,然后从左往右依次考察每一个机器人向左以及向右射出子弹时其所能到达的范围,然后通过二分查找的方式去查找对应范围内的墙壁个数即可。

因此,我们只需要设计一个迭代函数dp(idx, dir),前者表示当前考察的机器人,后者表示前一个机器人的子弹射出方向,由此我们即可在O(2N)O(2N)O(2N)的复杂度内将结果计算完毕。

但是需要注意的是,在实际计算子弹射出范围的时候,我们需要考察每一种情况下的子弹范围交叠情况,然后需要扣除掉多余的部分,这个还是需要分类讨论好好细化一下的,这里就不过多赘述了,有兴趣的读者对着代码自己想一下就行了。

2. 代码实现

给出python代码实现如下:

class Solution:def maxWalls(self, robots: List[int], distance: List[int], walls: List[int]) -> int:robs = sorted([(i, d) for i, d in zip(robots, distance)])walls = sorted(walls)n, m = len(robs), len(walls)@lru_cache(None)def dp(idx, ori):if idx >= n:return 0loc, dis = robs[idx]rbound = min(loc + dis, robs[idx+1][0]) if idx < n-1 else loc + disrcount = bisect_left(walls, rbound+1) - bisect_left(walls, loc)lbound = max(loc - dis, robs[idx-1][0]) if idx > 0 else loc - dislcount = bisect_left(walls, loc+1) - bisect_left(walls, lbound)if ori == "right":if robs[idx-1][0] + robs[idx-1][1] >= loc:wid = bisect.bisect_left(walls, loc)if wid < m and walls[wid] == loc:return rcount + dp(idx+1, "right") - 1else:return rcount + dp(idx+1, "right")elif robs[idx-1][0] + robs[idx-1][1] >= lbound:_lbound = min(robs[idx-1][0] + robs[idx-1][1]+1, loc+1)_lcount = bisect_left(walls, loc+1) - bisect_left(walls, _lbound)return max(rcount + dp(idx+1, "right"), _lcount + dp(idx+1, "left"))else:return max(rcount + dp(idx+1, "right"), lcount + dp(idx+1, "left"))else:if ori == "left" and lbound == robs[idx-1][0]:wid = bisect.bisect_left(walls, lbound)if wid < m and walls[wid] == lbound:return max(rcount + dp(idx+1, "right"), lcount + dp(idx+1, "left")-1)return max(rcount + dp(idx+1, "right"), lcount + dp(idx+1, "left"))return dp(0, "")

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

http://www.dtcms.com/a/349217.html

相关文章:

  • 阿里AI模型获FDA突破性医疗器械认定,AI医疗走向国际舞台,来近屿智能系统学习AIGC大模型技术
  • 芋道前端项目部署后刷新 404 的解决办法(Nginx 配置教程)
  • 计算机网络:聊天室(UDP)
  • 器件(十)——经典封装类型总结
  • JUC之ThreadLocal
  • MySQL的安装和卸载指南(入门到入土)
  • python写上位机并打包250824
  • 第04章 SPSS简介与数据库构建
  • 2025最新ncm转MP3,网易云ncm转mp3格式,ncm转mp3工具!
  • C6.1:发射极偏置放大器
  • 支持多种模型,无限AI生图工具来了
  • 智元精灵GO1 agibot数据转换Lerobot通用格式数据脚本
  • 3.2 半导体随机存取存储器 (答案见原书 P168)
  • 你在四阶段数据成熟度旅程中处于哪个阶段?
  • 高数 不定积分(4-3):分部积分法
  • APP逆向——某站device-id参数(2)
  • 56 C++ 现代C++编程艺术5-万能引用
  • Linux内核ELF文件签名验证机制的设计与实现(C/C++代码实现)
  • DeepSeek对采用nginx实现透传以解决OpenShift 4.x 私有数据中心和公有云混合部署一套集群的解答
  • 机床智能健康管理系统:工业母机数字化转型的核心引擎​
  • 在mysql中,modify ,change ,rename to的作用是什么
  • AI使用日志(一)--Cursor和Claude code初体验
  • 用 Python 探索二分查找算法:从基本原理到实战最佳实践
  • 自回归(Auto-Regressive, AR),自回归图像生成过程
  • 【Canvas与旗帜】蓝圈汤加旗
  • 基于蓝牙的stm32智能火灾烟雾报警系统设计
  • 一个高度精简但结构完整的微服务示例
  • 敏感电阻简单介绍
  • Java 创建线程的几种方式
  • Python复数运算完全指南:从基础到工程级应用实践