leetcode 704.二分查詢
阿新 • • 發佈:2018-11-22
題目描述:
給定一個 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),測試執行時間竟然沒有變少。