二分法在数组中,找>=某个数最左侧的位置

前提:数组有序
例: 1 2 2 2 2 3 4 5 6 7 8    大于等于 2 最左的位置为1
int BS_NearlyLeft(int arr[], int len, int val) {
    int ans = len - 1; //存储最优情况

    int L = 0;
    int R = len - 1;
    int mid = 0;

    while(L <= R) {
        mid = L + ((R - L) >> 1);
        if(arr[mid] >= val) { //大于等于再往左找
            ans = ans > mid ? mid : ans;
            R = mid - 1;
        }
        if(arr[mid] < val) { //小于往右找
            L = mid + 1;
        }
    }

    return ans;
}
全部评论

相关推荐

头像
10-09 19:35
门头沟学院 Java
洛必不可达:java的竞争激烈程度是其他任何岗位的10到20倍
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务