1102 得分最高的路徑

2021-10-16 13:11:12 字數 2019 閱讀 4571

題目描述:

給你乙個 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...