3281. Maximize Score of Numbers in Ranges - Medium
前往題目
想法
- 毫無頭緒,只覺得應該要用
binary search來做,但無從下手
思路
即便思考許久,也參考網路上解答,但還是沒有完全理解這題
Binary serach搜尋最終的結果- 下為
0,上為Integer.MAX_VALUE - 每次都檢查是否這個
score可以是答案(這裡檢查的部分就是我無法完全懂的地方)- 每次都檢查
前數 + score是否大於當前數字 + d,如果大於就代表這個score是不可能的 - 通過就更新前數為
前數 + score或當前數字取最大值 - 全部檢查完都通過就回傳
true
- 每次都檢查
這裡我不理解為什麼這樣檢查前數 + score是否大於當前數字 + d就可以確保score是valid…
Code
class Solution {
public int maxPossibleScore(int[] start, int d) {
int l = 0, r = Integer.MAX_VALUE;
int res = 0;
Arrays.sort(start);
// Search for the possible score
while (l <= r) {
// Possible score
int mid = l + (r - l) / 2;
if (isValid(start, d, mid)) {
res = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return res;
}
private boolean isValid(int[] nums, int d, int possibleScore) {
int prev = nums[0];
for (int i = 1; i < nums.length; ++i) {
// Exceed the maximum day
if (prev + possibleScore > nums[i] + d) return false;
// Update previous value
prev = Math.max(prev + possibleScore, nums[i]);
}
return true;
}
}3281. Maximize Score of Numbers in Ranges - Medium
https://f88083.github.io/2024/09/12/3281-Maximize-Score-of-Numbers-in-Ranges-Medium/