2849. 判斷能否在給定時間到達單元格
給你四個整數 sx、sy、fx、fy 以及一個 非負整數 t 。
在一個無限的二維網格中,你從單元格 (sx, sy) 開始出發。每一秒,你 必須 移動到任一與之前所處單元格相鄰的單元格中。
如果你能在 恰好 t 秒 后到達單元格 (fx, fy) ,返回 true ;否則,返回 false 。
單元格的 相鄰單元格 是指該單元格周圍與其至少共享一個角的 8 個單元格。你可以多次訪問同一個單元格。
示例 1:
輸入:sx = 2, sy = 4, fx = 7, fy = 7, t = 6
輸出:true
解釋:從單元格 (2, 4) 開始出發,穿過上圖標注的單元格,可以在恰好 6 秒后到達單元格 (7, 7) 。
示例 2:
輸入:sx = 3, sy = 1, fx = 7, fy = 3, t = 3
輸出:false
解釋:從單元格 (3, 1) 開始出發,穿過上圖標注的單元格,至少需要 4 秒后到達單元格 (7, 3) 。 因此,無法在 3 秒后到達單元格 (7, 3) 。
提示:
\[1 <= sx, sy, fx, fy <= 10^9\\
0 <= t <= 10^9\\
\]
解題思路
見代碼注釋
code
class Solution {
public:
//數據范圍:1e9,基本上是和BFS無緣了
//可以往八個相鄰的方格走并且允許重復
//也就是只要t > 最短時間即可
//關鍵是如何求最短時間
//min_t = max(abs(fx - sx),abs(fy - sy))
//思考方式:盡量斜著走,可以xy同時接近目標,直到兩者有一個目標值相等,再橫著走
//無論是斜著走還是橫著走,都是在x或y上增加,選擇其中的較大值即可
bool isReachableAtTime(int sx, int sy, int fx, int fy, int t) {
if(sx == fx && sy == fy)
return t != 1;
int min_t = max(abs(fx - sx),abs(fy - sy));
//cout<<min_t<<endl;
return min_t <= t;
}
};
浙公網安備 33010602011771號