leetcode 704.二分查找

题目描述:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

思路:先做一个暴力的查找吧,O(n)时间复杂度的。

int search(vector<int>& nums, int target) {
        int ans=nums.size();
        while(--ans>=0)
            if(nums[ans]==target)
                break;
        return ans;
    }

很明显,暴力搜索浪费了一个重要信息:数组是升序的。

二分算法实现:

int search(vector<int>& nums, int target) {
        int left=0,right=nums.size(),mid;
        while(left<right)
        {
            mid=(left+right)/2;
            //恰好找到
            if(nums[mid]==target)
                return mid;
            //target在mid右边
            else if(nums[mid]<target)
            {
                left=mid+1;
            }
            //target在mid左边
            else
                right=mid;
        }
        return -1;
    }

明明时间复杂度降低到了O(logn),测试运行时间竟然没有变少。

猜你喜欢

转载自blog.csdn.net/liusiweix/article/details/84075143