1. 程式人生 > >leetcode 704.二分查詢

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),測試執行時間竟然沒有變少。