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

leetcode 1631.最小体力消耗路径

思路:BFS+二分

这道题和洛谷上的那个“汽车拉力赛”那道题很相似,但是这道题相较于洛谷那个来说会简单一些。

这里作者一开始写的时候思路堵在了怎么在BFS中用二分,先入为主的以为需要先写出来搜索函数然后再去处理二分的事,但是这里是先二分找数,然后再搜索才是对的。所以先入为主之后就没有做出来。

注意:需要注意数据范围,另外,每一次更新mid数值的时候,我们上一次已经搜索过的数组,队列等存储单元都需要清空,不然的话会影响后面的输出结果。还有,二分注意用哪一个模板,选择也是很重要的。这里主要是求最小值,所以是(left+right)/2而不是(left+right+1)/2,还有就是while中不要left<=right,你用范围的二分查找会造成死循环,但是用于基本的找数是可以的。

class Solution {
public:int minimumEffortPath(vector<vector<int>>& heights) {int dx[4]={1,-1,0,0};int dy[4]={0,0,1,-1};int left=0;int right=1000000;while(left<right){queue<pair<int,int>>q;q.push({0,0});vector<vector<bool>>st(heights.size(),vector<bool>(heights[0].size(),false));st[0][0]=true;int mid=(left+right)/2;while(!q.empty()){auto tmp=q.front();q.pop();for(int i=0;i<4;i++){int a=dx[i]+tmp.first;int b=dy[i]+tmp.second;if(a>=heights.size()||a<0||b<0||b>=heights[0].size())continue;if(st[a][b])continue;if(abs(heights[a][b]-heights[tmp.first][tmp.second])>mid)continue;q.push({a,b});st[a][b]=true;}}if(st[heights.size()-1][heights[0].size()-1]){right=mid;}else{left=mid+1;}}return right;}
};

http://www.lryc.cn/news/367027.html

相关文章:

  • 【ARM64 常见汇编指令学习 19.2 -- ARM64 地址加载指令 ADR 详细介绍】
  • vscode输出控制台中文显示乱码最有效解决办法
  • springboot + Vue前后端项目(第十五记)
  • 如何在Windows 11中恢复丢失的快速访问菜单?这里提供解决办法
  • 变声器软件免费版有哪些?国内外12大热门变声器大盘点!(新)
  • 计算机网络 —— 数据链路层(无线局域网)
  • SpringBoot图书管理系统【附:资料➕文档】
  • shell简介
  • 使用 Scapy 库编写 ICMP 不可达攻击脚本
  • Electron qt开发教程
  • 尝试用 GPT-4o 写 2024高考语文作文
  • 自动化Reddit图片收集:Python爬虫技巧
  • 自动驾驶人工智能
  • 基础乐理入门
  • mysql 8 linux7,8安装教程
  • 『矩阵论笔记』特征分解(eigendecomposition)通俗解释!
  • 顶级域名和二级域名的区别
  • 深入解析Kafka消息丢失的原因与解决方案
  • 【Python列表解锁】:掌握序列精髓,驾驭动态数据集合
  • 安卓打造安装包(应用打包、规范处理安装包、安全加固)
  • ElasticSearch教程(详解版)
  • [office] excel做曲线图的方法步骤详解 #经验分享#知识分享#其他
  • Git+Gitlab 远程库测试学习
  • Python可视化 | 使用matplotlib绘制面积图示例
  • 【环境搭建】2.阿里云ECS服务器 安装MySQL
  • Python Flask 入门开发
  • PostgreSQL查看当前锁信息
  • 毫米波雷达深度学习技术-1.6目标识别2
  • MineAdmin 前端打包后,访问速度慢原因及优化
  • 使用Obfuscar 混淆WPF(Net6)程序