文章目录

  • 1. 题目
  • 2. 解题
    • 2.1 优先队列BFS
    • 2.2 极大极小化 二分查找

1. 题目

给你一个 R 行 C 列的整数矩阵 A。矩阵上的路径从 [0,0] 开始,在 [R-1,C-1] 结束。

路径沿四个基本方向(上、下、左、右)展开,从一个已访问单元格移动到任一相邻的未访问单元格。

路径的得分是该路径上的 最小 值。例如,路径 8 → 4 → 5 → 9 的值为 4 。

找出所有路径中得分 最高 的那条路径,返回其 得分。

示例 1:

输入:[[5,4,5],[1,2,6],[7,4,6]]
输出:4
解释:
得分最高的路径用黄色突出显示。

示例 2:

输入:[[2,2,1,2,2,2],[1,2,2,2,1,2]]
输出:2

示例 3:

输入:[[3,4,6,3,4],[0,2,1,1,7],
[8,8,3,2,7],[3,2,4,9,8],
[4,1,2,0,0],[4,6,5,4,3]]
输出:3提示:
1 <= R, C <= 100
0 <= A[i][j] <= 10^9

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-with-maximum-minimum-value
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 优先队列BFS

B站大佬讲解:LeetCode 1102. Path With Maximum Minimum Value

struct point
{int x;int y;int val;point(int x0, int y0, int v){x = x0;y = y0;val = v;}
};
struct cmp
{bool operator()(point& a, point& b) {return a.val < b.val;//值大的优先}
};
class Solution {vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};
public:int maximumMinimumPath(vector<vector<int>>& A) {int m = A.size(), n = A[0].size(), i, j, x, y, k, ans = A[0][0];vector<vector<bool>> visited(m, vector<bool>(n,false));visited[0][0] = true;priority_queue<point,vector<point>,cmp> q;q.push(point(0, 0, A[0][0]));while(!q.empty()){ans = min(ans, q.top().val);i = q.top().x;j = q.top().y;q.pop();if(i==m-1 && j==n-1)return ans;for(k = 0; k < 4; ++k){x = i + dir[k][0];y = j + dir[k][1];if(x>=0 && x<m && y>=0 && y<n && !visited[x][y]){q.push(point(x, y, A[x][y]));visited[x][y] = true;}}}return ans;}
};

1000 ms 25.8 MB

2.2 极大极小化 二分查找

LeetCode 1231. 分享巧克力(极小极大化 二分查找)
LeetCode 778. 水位上升的泳池中游泳(二分查找+dfs)

class Solution {vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};int m, n, ans;
public:int maximumMinimumPath(vector<vector<int>>& A) {m = A.size(), n = A[0].size();int l = 0, r = min(A[0][0], A[m-1][n-1]);while(l <= r){vector<vector<bool>> visited(m, vector<bool>(n,false));int midval = (l+r)/2;if(canfindpath(A,visited,0,0,midval))//能找到任意一条路径,其所有值都大于等于 midval{ans = midval;l = midval + 1;}elser = midval-1;}    return ans;}bool canfindpath(vector<vector<int>>& A, vector<vector<bool>>& visited, int i, int j, int v){int x, y, k;visited[i][j] = true;if(i==m-1 && j==n-1)return true;for(k = 0; k < 4; ++k){x = i + dir[k][0];y = j + dir[k][1];if(x>=0 && x<m && y>=0 && y<n && !visited[x][y] && A[x][y] >= v){if(canfindpath(A, visited,x,y,v))return true;}}return false;}
};

356 ms 28 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1102. 得分最高的路径(优先队列BFS/极大极小化 二分查找)相关推荐

  1. leetcode 分享巧克力 java_LeetCode 1231. 分享巧克力(极小极大化 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 你有一大块巧克力,它由一些甜度不完全相同的小块组成.我们用数组 sweetness 来表示每一小块的甜度. 你打算和 K 名朋友一起分享这块巧克力,所以你 ...

  2. Leetcode(5)——遍历,并查集,回溯法和二分查找

    格式: 题号+题名+简单思路+code 遍历 深度优先遍历和广度优先遍历 很多dfs可以用Union Find解决 T130: 被围绕的区域 DFS的写法 func solve(board [][]b ...

  3. leetcode 911. Online Election | 911. 在线选举(加强堆 + 二分查找)

    题目 https://leetcode.com/problems/online-election/ 题解 我的解法是,用预计算(加强堆,O(nlogn)) + 二分查找(用的自带TreeMap,查找复 ...

  4. leetcode 436. Find Right Interval | 436. 寻找右区间(二分查找不小于某值的第一个位置)

    题目 https://leetcode.com/problems/find-right-interval/ 题解 这题考察点不难,就是个普通的二分查找.详细过程是: 因为 start 是唯一的,所以先 ...

  5. LeetCode 2071. 你可以安排的最多任务数目(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给你 n 个任务和 m 个工人.每个任务需要一定的力量值才能完成,需要的力量值保存在下标从 0 开始的整数数组 tasks 中,第 i 个任务需要 tas ...

  6. LeetCode 1618. 找出适应屏幕的最大字号(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 text.并能够在 宽为 w 高为 h 的屏幕上显示该文本. 字体数组中包含按升序排列的可用字号,您可以从该数组中选择任何字体大小. 您可 ...

  7. LeetCode 1552. 两球之间的磁力(极小极大化 二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力. Rick 有 n 个空的篮子,第 i 个 ...

  8. LeetCode 4. 寻找两个有序数组的中位数(二分查找,难)

    文章目录 1. 题目 2. 解题 2.1 合并数组 2.2 优化2.1解法,双指针 2.3 二分法(找第k个数) 2.4 切分法 1. 题目 给定两个大小为 m 和 n 的有序数组 nums1 和 n ...

  9. LeetCode 1533. Find the Index of the Large Integer(二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 We have an integer array arr, where all the integers in arr are equal except ...

最新文章

  1. 【常用】细数那些常用的linux命令(只针对更新前端代码、上传文件到linux服务器)
  2. Android项目框架综合实例
  3. 全球首个城市内河无人驾驶数据集发布、奥地利学者用「量子扭曲」加速强化学习 | AI日报...
  4. linux python保存mp4
  5. POJ1698 最大流或者匈牙利
  6. 关于MetaAPI问题CSDN给的邮件回复
  7. flutter开发之必须掌握的dart知识点:list,set,map
  8. 从零开始带你一步一步使用YOLOv3测试自己的数据
  9. linux下c语言tcp文件传输,C语言实现TCP通信
  10. vue项目使用sass-loader
  11. TensorFlow2.0(三)--Keras构建神经网络回归模型
  12. hdfs和日志业务系统
  13. mysql 动态插入日期_mysql 如何动态传入一个时间得到此时间的某个时间点
  14. 自然语言处理 4.语义分析
  15. php免登录发帖源码,企业版PHP自动发卡源码免授权优化版源码
  16. 中国抗生素产业运行状况与需求前景规模预测报告2022版
  17. 想知道直销银行账户吗?
  18. YOLOv1: You Only Look Once: Unified, Real-Time Object Detection
  19. java缺失_Java中找出缺失的数字
  20. css less 不要作用到子对象_CSS的亲儿子,居然不是Less??

热门文章

  1. tornado学习笔记day02-进阶与提升
  2. Linux命令三剑客:grep、sed、awk总结
  3. #Pragma Pack(n)与内存分配 pragma pack(push,1)与#pragma pack(1)的区别
  4. 值不值得入手_iPhone11现在还值不值得入手?真实用户说出心里话
  5. rabbitmq消息队列,消息发送失败,消息持久化,消费者处理失败相关
  6. angularjs控制器之间的数据共享与通信
  7. 思科模拟器:[1]安装及汉化详解
  8. Proactor设计模式:单线程高并发
  9. iOS之加密的三种方法
  10. std::vector中resize()和reserve()区别