1552. 两球之间的磁力

该题和875题爱吃香蕉的珂珂是同类题目,采用二分查找方式
特点:有序,找右边界

int cmp(const void *a, const void *b) {
    return *(int *)a - *(int *)b;
}
int canputballbyspace(int *position, int positionSize, int mid){
    int begin = position[0];
    int cnt = 1;
    int i;
    for(i = 1; i<positionSize;i++) {
        if(position[i] - begin >= mid) {
            begin = position[i];
            cnt++;
        }
    }
    return cnt;
}
int maxDistance(int* position, int positionSize, int m){
    qsort(position, positionSize, sizeof(position[0]), cmp);
    int l = 1;
    int r = position[positionSize-1] - position[0];
    int mid; 
    while(l<=r) {
        mid = l + (r - l) / 2;
        int ballnum = canputballbyspace(position, positionSize, mid);
        if(ballnum == m) {
            l = mid + 1;
        } else if(ballnum > m) {
            l = mid + 1;
        } else {
            r = mid - 1;
        }
    }
    return l - 1;
}```
posted @ 2021-01-16 16:38  cn风  阅读(48)  评论(0)    收藏  举报