LCP 45. 自行车炫技赛场 - 力扣(LeetCode) (leetcode-cn.com)
易错点
简单的搜索是不行的,因为有可能会有转一圈回来速度 == 1 的情况

剪枝
根据数据范围,骑手的速度是不可能到达101以上的
题目给出速度<=0就结束了
用一个三维数组保存这个位置的这个速度,如果已经到达过就不用再搜索了

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;class Solution {int sx, sy, n, m;int[][][] vis;Set<Integer> ansSet = new HashSet<>();int[][] dir = new int[][]{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};public int[][] bicycleYard(int[] position, int[][] terrain, int[][] obstacle) {sx = position[0];sy = position[1];n = terrain.length;m = terrain[0].length;vis = new int[n][m][102];dfs(terrain, obstacle, position[0], position[1], 1);int[][] ans = new int[ansSet.size()][2];int idx = 0;for (Integer item : ansSet) {ans[idx][0] = item / m;ans[idx][1] = item % m;idx++;}Arrays.sort(ans, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if (o1[0] != o2[0]) {return o1[0] - o2[0];} else {return o1[1] - o2[1];}}});return ans;}private void dfs(int[][] terrain, int[][] obstacle, int x, int y, int speed) {//pruneif (speed <= 0 || vis[x][y][speed] == 1)return;//solutionif (speed == 1) {if (!(x == sx && y == sy)) {ansSet.add(x * m + y);}}//dfsvis[x][y][speed] = 1;for (int i = 0; i < 4; i++) {int dx = x + dir[i][0];int dy = y + dir[i][1];if (dx < 0 || dy < 0 || dx >= n || dy >= m)continue;int h1 = terrain[x][y], h2 = terrain[dx][dy], o2 = obstacle[dx][dy];int nextSpeed = speed + h1 - h2 - o2;dfs(terrain, obstacle, dx, dy, nextSpeed);}}
}

算法-leetcode-LCP 45. 自行车炫技赛场相关推荐

  1. LeetCode LCP45 自行车炫技赛场

    从起点开始,对能达到的位置进行dfs.当速度为0或负值时,递归应停止. 同一个位置可能会经过多次,使用三维数组/vector存储到过的速度.(当速度值过大时也可以用map记录) 若到某点速度为v那么v ...

  2. ⭐算法入门⭐《二分枚举》简单15 —— LeetCode LCP 18. 早餐组合

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   小扣在秋日市集选择了一 ...

  3. Python 炫技操作:合并字典的七种方法

    来源 | Python编程时光(ID: Cool-Python) Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的.在这些人的眼里,能够写出那些一般开发者看 ...

  4. java加减乘除运算代码_从“位运算”炫技到“操作符”,再到逐步理解“群论”...

    由位运算到操作符,再到逐步理解群论 Step by Step for Understanding from Bitwise to Operators, then Group Theory 是否曾经会有 ...

  5. 看完阿逗比年度炫技大会,我什么都不敢信了

    栗子 乾明 鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一年一度,阿逗比(Adobe)又来炫技了. 许多魔法,曾经只在论文里出现,没有给麻瓜玩耍的通道,如今都能一键解锁. 比如,一键调 ...

  6. 云风:不加班、不炫技,把复杂的问题简单化

    小学时跟随母亲去成人大学学习编程,初中开始参加信息学奥赛,高中写出人生中第一个成熟软件--Cview,大学发布开源软件风魂系列,后用于网易开发的<大话西游><梦幻西游>等热门游 ...

  7. Python 炫技操作:条件语句的七种写法

    作者 | 写代码的明哥 责编 | 屠敏 来源 | Python编程时光 有的人说 Python 入门容易,但是精通难的语言,这点我非常赞同. Python 语言里有许多(而且是越来越多)的高级特性,是 ...

  8. AI生成新春祝福海报,AIGC从“炫技”走向日常

    在ChatGPT的带动下,AIGC可以说是过去一年里最火的概念. 就在临近春节的日子里,一款名为"写作蛙"的微信小程序正在悄然流行.简单输入几句祝福语,就能自动生成图文并茂的祝福海 ...

  9. 探索编程的极限:挑战炫技代码

    程序员常常被视为具有超强技术能力的人才,而他们手中的代码也往往充满了令普通人惊叹的炫技操作.作为程序员的我,将和大家分享一些炫技的代码写法 一.编程语言介绍 本人主攻Java.下面我将介绍一下Java ...

最新文章

  1. 代码神器:拒绝重复编码,这款IDEA插件了解一下.....
  2. (一)Cisco DHCP Snooping原理(转载)
  3. 黑马程序员——Java正则表达式
  4. 0025-中点位移的速度
  5. BZOJ2958 序列染色
  6. XStream转换Java对象与XML
  7. Delphi:ADOConnection连接SQLServer自动断网问题解决
  8. C# wpf编程CM框架快速入门项目实例
  9. redistemplate.opsforvalue 设置不过期_民法典即将实施!“离婚冷静期”倍受关注
  10. [转载]强大的grep用法详解:grep与正则表达式
  11. Linux快捷键及命令
  12. mysql学习之mysql集群
  13. 最新kali之arping
  14. mac下Flash cc2014的破解方法
  15. java获取上个月15号_java获取当前上一周、上一月、上一年的时间
  16. 研究生学位论文文献检索小技巧——妙用谷歌学术搜索
  17. ios代码中的内存泄露,内存检测工具leaks 检测不出来
  18. Tomcat和Was服务器中文乱码问题总结
  19. 公民身份证校验规则最新最全最严格(包含最后一位校验码校验)
  20. 中国砖瓦市场竞争格局与销售策略分析报告2022-2028年版

热门文章

  1. 左值、右值、右值引用、移动、引用坍缩和完美转发
  2. 微博短视频服务优化实践
  3. python入门级新手接单一单两百块,经验方法分享
  4. Windows系统重装Ubuntu桌面版
  5. uni-app页面部分模块转化成图片并保存(适用app和h5)以及涉及轮播滚动时,区分轮播内容生成图片方法
  6. linux拒绝一个ip访问,linux设置iptables禁止某个IP访问
  7. 码教授好不好?看服务了
  8. LVGL学习——动画 时间线
  9. 属性动画+购物车+全选反选+选中计算价格+单个删除
  10. jquery粘贴按钮_jquery实现复制的两种方式