日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1102. 得分最高的路径(优先队列BFS/极大极小化 二分查找) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 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/极大极小化 二分查找)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。