題目描述:
給你乙個 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
方法1:
(1)二分+dfs;
(2)每次dfs判斷能否找乙個所有結點都大於給定中間值的路徑,若能,則更新左邊界,若不能,則更新右邊界;
class
solution
if(row==a.
size()
-1&&col==a[0]
.size()
-1) sign[row]
[col]
=true
;//標識訪問過
cur_v.
push_back
(a[row]
[col]);
//儲存當前路徑結點
//四個方向if(
dfs(a,sign,row-
1,col,cur_v,mid)
||dfs
(a,sign,row+
1,col,cur_v,mid)
||dfs
(a,sign,row,col-
1,cur_v,mid)
||dfs
(a,sign,row,col+
1,cur_v,mid)
) cur_v.
pop_back()
;//回溯
return
false
;//沒有到達目標位置
}int
maximumminimumpath
(vector
int>>
& a)
//更新結果和左邊界
res=mid;
left=mid+1;
}else
}return res;}}
;
方法2:主要思路:
(1)最短路徑思路;
(2)bfs;
class
solution);
vector
int,
int>> dirs=,,
,};//四個方向
while
(!q.
empty()
)); distances[new_row]
[new_col]
=min
(distances[cur_row]
[cur_col]
,a[new_row]
[new_col]);
}}}}
return distances.
back()
.back()
;}};
798 得分最高的最小輪調
給你乙個陣列 nums,我們可以將它按乙個非負整數 k 進行輪調,這樣可以使陣列變為 nums k nums k 1 nums nums.length 1 nums 0 nums 1 nums k 1 的形式。此後,任何值小於或等於其索引的項都可以記作一分。例如,陣列為 nums 2,4,1,3,0...
1102搬家的煩惱
include 廈門理工學院 計算機與資訊工程學院 fnlock 程式描述 搬家的煩惱 time limit 1000ms memory limit 65536k total submit 997 accepted 256 description 理工學院的學生每個學年結束以後都要搬宿舍,搬宿舍的煩...
1102 面積最大的矩形
有乙個正整數的陣列,化為直方圖,求此直方圖包含的最大矩形面積。例如 2,1,5,6,2,3,對應的直方圖如下 面積最大的矩形為5,6組成的寬度為2的矩形,面積為10。收起第1行 1個數n,表示陣列的長度 0 n 50000 第2 n 1行 陣列元素a i 1 a i 10 9 輸出最大的矩形面積62...