This commit is contained in:
kkunkka
2025-05-30 12:19:27 +08:00
parent 934dfce0cc
commit 1c44ed4da8
2 changed files with 59 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
package com.dota.binarySearch._1642;
import java.util.PriorityQueue;
class Solution {
public int furthestBuilding(int[] heights, int bricks, int ladders) {
var p = new PriorityQueue<Integer>((a, b) -> b - a);
int n = heights.length;
for (int i = 1; i < n; i++) {
var diff = heights[i] - heights[i - 1];
if (diff <= 0) continue;
p.offer(diff);
if (bricks >= diff) {
bricks -= diff;
} else if (ladders > 0) {
ladders--;
bricks += p.poll();
bricks -= diff;
if (bricks < 0) return i - 1;
} else {
return i - 1;
}
}
return n - 1;
}
}

View File

@@ -0,0 +1,32 @@
package com.dota.binarySearch._1802;
class Solution {
public int maxValue(int n, int index, int maxSum) {
int l = 1, r = maxSum + 1;
while (l + 1 < r) {
int mid = l + (r - l) / 2;
if (check(n, index, maxSum, mid)) {
l = mid;
} else {
r = mid;
}
}
return l;
}
boolean check(int n, int index, int maxSum, int k) {
long sum = 0;
int l = Math.max(0, index - k + 1);
sum += (long) (k + k - (index - l)) * (index - l + 1) / 2;
if (l > 0) {
sum += l;
}
int r = Math.min(index + k - 1, n - 1);
sum += (long) (k + k - (r - index)) * (r - index + 1) / 2;
if (r < n - 1) {
sum += n - r - 1;
}
sum -= k;
return sum <= maxSum;
}
}