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;
    }
};
相关推荐
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 739. 每日温度 | C++ 逆序单调栈
c++·算法·leetcode
良木生香1 小时前
【C++初阶】:STL——String从入门到应用完全指南(1)
c语言·开发语言·数据结构·c++·算法
XWalnut2 小时前
LeetCode刷题 day16
数据结构·算法·leetcode·链表·动态规划
foundbug9993 小时前
基于混合整数规划的电池容量优化 - MATLAB实现
数据结构·算法·matlab
chutao3 小时前
EasyPDF 转图片(EasyPdf2Image)—— 本地安全实用的PDF与图片双向互转工具
安全·职场和发展·pdf·创业创新·学习方法
海绵宝宝的月光宝盒4 小时前
2-非金属材料
经验分享·笔记·学习·其他·职场和发展·课程设计·制造
memcpy05 小时前
LeetCode 2452. 距离字典两次编辑以内的单词【暴力;字典树】中等
算法·leetcode·职场和发展
王老师青少年编程5 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:魔法
c++·算法·贪心·csp·信奥赛·排序贪心·魔法
wearegogog1235 小时前
基于和差波束法的单脉冲测角MATLAB实现
人工智能·算法·matlab
AI科技星5 小时前
灵魂商数(SQ) · 全域数学统一定义【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算