牛客网NC105 二分查找

NC105

请实现有重复数字的有序数组的二分查找。
输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。

二分答案模板题,区间中满足条件的最小值。

class Solution {
    
    
public:
    /**
     * 二分查找
     * @param n int整型 数组长度
     * @param v int整型 查找值
     * @param a int整型vector 有序数组
     * @return int整型
     */
    int upper_bound_(int n, int v, vector<int>& a) {
    
    
        // write code here
        int l = 0;
        int r = n - 1;
        int ans = -1;
        while (l <= r) {
    
    
            int mid = (l + r) >> 1;
            if (a[mid] >= v) {
    
    
                ans = mid;
                r = mid - 1;
            } else {
    
    
                l = mid + 1;
            }
        }
        if (ans == -1) {
    
    
            return n + 1;
        } else {
    
    
            return ans + 1;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/WxqHUT/article/details/108993056