2017 年。网格游戏
难度:中等
主题:数组、矩阵、前缀和
给定一个 0 索引 大小为 2 x n 的二维数组网格,其中 grid[r][c] 表示矩阵上位置 (r, c) 处的点数。两个机器人正在这个矩阵上玩游戏。
两个机器人最初都从 (0, 0) 开始,并希望到达 (1, n-1)。每个机器人只能向右移动((r, c) 到 (r, c 1))或向下((r, c) 到 (r 1, c))。
游戏开始时,第一个机器人从 (0, 0) 移动到 (1, n-1),收集其路径上单元格的所有点。对于路径上遍历的所有单元格 (r, c),grid[r][c] 设置为 0。然后,第二个 机器人从 (0, 0) 移动到 (1, n-1) ),收集其路径上的点。请注意,它们的路径可能会相互交叉。
第一个机器人想要最小化第二个机器人收集的点数。相比之下,第二个机器人想要最大化它收集的点数。如果两个机器人都表现最佳,则返回第二个机器人收集的分数。
示例1:
- 输入: grid = [[2,5,4],[1,5,1]]
- 输出: 4
- 说明:第一个机器人所采取的最佳路径以红色显示,第二个机器人所采取的最佳路径以蓝色显示。
- 第一个机器人访问的单元格设置为 0。
- 第二个机器人将收集 0 0 4 0 = 4 分。
示例2:
- 输入: grid = [[3,3,1],[8,5,2]]
- 输出: 4
- 说明:第一个机器人所采取的最佳路径以红色显示,第二个机器人所采取的最佳路径以蓝色显示。
- 第一个机器人访问的单元格设置为 0。
- 第二个机器人将收集 0 3 1 0 = 4 分。
示例 3:
- 输入: grid = [[1,3,1,15],[1,3,3,1]]
- 输出: 7
-
说明:第一个机器人所采取的最佳路径以红色显示,第二个机器人所采取的最佳路径以蓝色显示。
- 第一个机器人访问的单元格设置为 0。
- 第二个机器人将收集 0 1 3 3 0 = 7 分。
约束:
- grid.length == 2
- n == grid[r].length
- 1 4
- 1 5
提示:
- 第一个机器人移动到第二排时有n种选择。
- 我们可以使用前缀和来帮助解决这个问题吗?
解决方案:
我们将使用以下方法:
前缀和计算:我们将计算网格两行的前缀和,以有效计算任何子数组的点总和。
-
模拟最佳运动:
- 第一个机器人确定其路径,以最小化留给第二个机器人的点。
- 在每个列转换时,第一个机器人可以选择向下移动,将网格分成两部分:
- 上部剩余点:过渡列之后顶行的点。
- 较低剩余点:过渡列之前的底行中的点。
-
最小化第二个机器人的最大分数:
- 在每次转换时,计算第二个机器人在第一个机器人的路径之后可以收集的最大点数。
- 跟踪所有转换中这些最大值的最小值。
让我们用 PHP 实现这个解决方案:2017。网格游戏
<?php function gridGame($grid) { ... ... ... /** * go to ./solution.php */ } // Example usage $grid1 = [[2, 5, 4], [1, 5, 1]]; $grid2 = [[3, 3, 1], [8, 5, 2]]; $grid3 = [[1, 3, 1, 15], [1, 3, 3, 1]]; echo gridGame($grid1) . "\n"; // Output: 4 echo gridGame($grid2) . "\n"; // Output: 4 echo gridGame($grid3) . "\n"; // Output: 7 ?>
解释:
-
前缀和计算:
- prefixTop 和 prefixBottom 分别存储顶行和底行的累积和。
- 这些可以实现高效的范围总和计算。
-
模拟第一个机器人的路径:
- 在每一列 i,第一个机器人可以决定在 i 列之后向下移动。
- 这将网格分为两个区域:
- 第 i 列之后的顶行(收集点:prefixTop[n] - prefixTop[i 1])。
- 第 i 列之前的底行(收集点:prefixBottom[i])。
-
第二个机器人的最优点:
- 第二个机器人将占据剩余两个区域中的最大值。
- 我们跟踪所有可能的转换的最大值中的最小值。
-
复杂性:
- 时间复杂度:O(n),因为我们计算前缀和并循环遍历网格一次。
- 空间复杂度:O(n),由于前缀和数组。
示例演练
输入:网格 = [[2, 5, 4], [1, 5, 1]]
-
前缀和:
- 前缀顶部 = [0, 2, 7, 11]
- prefixBottom = [0, 1, 6, 7]
-
过渡点:
- i = 0:顶部剩余 = 11 - 7 = 9,底部剩余 = 0 → 第二个机器人 = 9.
- i = 1:顶部剩余 = 11 - 11 = 4,底部剩余 = 1 → 第二个机器人 = 4.
- i = 2:顶部剩余 = 0,底部剩余 = 6 →第二个机器人= 6.
- 第二个机器人的最低分数: min(9, 4, 6) = 4.
这与预期输出相符。
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
- 领英
- GitHub
以上是网格游戏的详细内容。更多信息请关注PHP中文网其他相关文章!

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

在PHP中使用预处理语句和PDO可以有效防范SQL注入攻击。1)使用PDO连接数据库并设置错误模式。2)通过prepare方法创建预处理语句,使用占位符和execute方法传递数据。3)处理查询结果并确保代码的安全性和性能。

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP可以轻松创建互动网页内容。1)通过嵌入HTML动态生成内容,根据用户输入或数据库数据实时展示。2)处理表单提交并生成动态输出,确保使用htmlspecialchars防XSS。3)结合MySQL创建用户注册系统,使用password_hash和预处理语句增强安全性。掌握这些技巧将提升Web开发效率。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Dreamweaver Mac版
视觉化网页开发工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具