LeetCode 704

https://leetcode.cn/problems/binary-search/description/

难度:简单

红蓝染色法,开区间二分。满足条件 nums[mid] >= target 更新 right = mid。更新什么什么就是答案,本题 right 就是答案。

时间复杂度:O(logn),其中 n 为 nums 的长度。

空间复杂度:O(1)。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int n = nums.size();
        int left = -1, right = n;
        while (left + 1 < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] >= target) {
                right = mid;
            } else {
                left = mid;
            }
        }
        if (right == n || nums[right] != target) {
            return -1;
        }
        return right;
    }
};