小猫mip网站建设网页制作与设计
问题背景
在代号为 C-137 的地球上,Rick 发现如果他将两个球放在他新发明的篮子里,它们之间会形成特殊形式的磁力。Rick 有 n n n个空的篮子,第 i i i 个篮子的位置在 p o s i t i o n [ i ] position[i] position[i], M o r t y Morty Morty 想把 m m m 个球放到这些篮子里,使得任意两球间 最小磁力 最大。
已知两个球如果分别位于 x x x 和 y y y,那么它们之间的磁力为 ∣ x − y ∣ |x - y| ∣x−y∣。
给你一个整数数组 p o s i t i o n position position 和一个整数 m m m,请你返回最大化的最小磁力。
数据约束
- n = p o s i t i o n . l e n g t h n = position.length n=position.length
- 2 ≤ n ≤ 1 0 5 2 \le n \le 10 ^ 5 2≤n≤105
- 1 ≤ p o s i t i o n [ i ] ≤ 1 0 9 1 \le position[i] \le 10 ^ 9 1≤position[i]≤109
- 所有 p o s i t i o n position position 中的整数 互不相同 。
- 2 ≤ m ≤ p o s i t i o n . l e n g t h 2 \le m \le position.length 2≤m≤position.length
解题过程
最小化最大值,考虑二分答案法。
和 扩展题 几乎完全一致,直接修改代码都能通过。
具体实现
class Solution {public int maxDistance(int[] position, int m) {Arrays.sort(position);int left = 1;int right = (position[position.length - 1] - position[0]) / (m - 1) + 1;while (left < right) {int mid = left + ((right - left) >>> 1);if (check(position, mid) >= m) {left = mid + 1;} else {right = mid;}}return left - 1;}private int check(int[] position, int power) {int res = 1;int pre = position[0];for (int item : position) {if (item >= pre + power) {res++;pre = item;}}return res;}
}