kk
This commit is contained in:
27
src/main/java/com/dota/binarySearch/_1642/Solution.java
Normal file
27
src/main/java/com/dota/binarySearch/_1642/Solution.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
32
src/main/java/com/dota/binarySearch/_1802/Solution.java
Normal file
32
src/main/java/com/dota/binarySearch/_1802/Solution.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user