Article directory
topic
Leetcode 1552. Magnetic force between two balls
Code (9.17 first brush to see the analysis)
Didi 9.15 written test questions
class Solution {
public:
bool check(int x, vector<int>& position, int m) {
int pre = position[0], cnt = 1;
for(int i = 1; i < position.size(); ++i) {
if(position[i] - pre >= x) {
// 累计可以放下球的个数
pre = position[i];
cnt += 1;
}
}
return cnt >= m;
}
int maxDistance(vector<int>& position, int m) {
sort(position.begin(), position.end());
int left = 1, right = position.back()-position[0], ans = -1;
while(left <= right) {
int mid = (left+right)/2;
if(check(mid, position, m)) {
// 若放得下m个球,增大球间距
ans = mid;
left = mid+1;
} else {
// 若放不下则减少球间距
right = mid -1;
}
}
return ans;
}
};