LeetCode 704:二分查找

标准的二分查找:一开始循环条件没有加等号在有些case是错的,加等号就可以,而且另一句针对单个元素的数组的检查也可以省掉了。 

做这道题主要是看到了知乎上关于二分查找的讨论:

使用这个模板编写二分查找法的一般流程:https://zhuanlan.zhihu.com/p/86136802

二分查找有几种写法?它们的区别是什么?:https://www.zhihu.com/question/36132386

讲的都很好,值得深入挖掘一下。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        const int n = nums.size();
        if(n < 1) return -1;
        //if(n == 1 && nums[0]==target) return 0;

        int left = 0;
        int right = n-1;
        while(left <= right) {
            int mid = (left + right)/2;
            if(nums[mid] == target) {
                return mid;
            }
            else if(nums[mid] > target){
                right = mid-1;
            }
            else{
                left = mid+1;
            }
        }
        return -1;
    }
};
发布了97 篇原创文章 · 获赞 11 · 访问量 2488

猜你喜欢

转载自blog.csdn.net/chengda321/article/details/102712453