497. 非重叠矩形中的随机点
import java.util.ArrayList;
import java.util.Random;
class Solution {
public ArrayList<Integer> arr;
public int[][] rects;
public Random random;
public Solution(int[][] rects) {
arr = new ArrayList<>();
this.rects = rects;
random = new Random();
arr.add(0);
for (int[] rect : rects) {
int pointNum = (rect[2] - rect[0] + 1) * (rect[3] - rect[1] + 1);
//前缀和
arr.add(arr.get(arr.size() - 1) + pointNum);
}
}
public int[] pick() {
int k = random.nextInt(arr.get(arr.size() - 1));
int indexRect = binarySearch(k) - 1;
int[] rect = rects[indexRect];
k -= arr.get(indexRect);
int a = rect[0], b = rect[1], y = rect[3];
int col = y - b + 1;
int da = k / col;
int db = k - da * col;
return new int[]{a + da, b + db};
}
public int binarySearch(int target) {
int left = 0;
//right = rect个数
int right = arr.size() - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (arr.get(mid) > target) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(rects);
* int[] param_1 = obj.pick();
*/

浙公网安备 33010602011771号