# LC1552 - Magnetic Force Between Two Balls
## 线性关系 二分查找猜答案
```java=
class Solution {
/*
x: the required force == the distance
f(x): if the distance is x, it can put f(x) balls
*/
public int maxDistance(int[] position, int m) {
// sanity check
// ...
Arrays.sort(position);
int length = position.length;
int minD = 1;
int maxD = position[length - 1] - position[0];
while (minD + 1 < maxD) {
int midD = minD + (maxD - minD) / 2;
if (canDistributeBallsBy(midD, m, position)) {
minD = midD;
} else {
maxD = midD;
}
}
// maximum
if (canDistributeBallsBy(maxD, m, position)) {
return maxD;
}
if (canDistributeBallsBy(minD, m, position)) {
return minD;
}
return -1;
}
// inverse function
private boolean canDistributeBallsBy(int targetD, int targetNumBalls, int[] position) {
int length = position.length;
int prevPos = position[0];
int numBalls = 1;
for (int i = 1; i < length; i++) {
if (position[i] - prevPos >= targetD) {
prevPos = position[i];
numBalls++;
if (numBalls >= targetNumBalls) {
return true;
}
}
}
return false;
}
}
```