给定一个规模为n的按照数字从小到大排序的数组,快速查询x元素在数组中的位置
示例:
数组:[-1,0,3,5,9,12]
查找的值:9
输出:4
1、计算数据规模为n二分查找的时间复杂度
循环次数 剩下的数据规模
第一次查找: T(1) = n/2
第二次查找: T(2) = n/2^2
第三次查找: T(3) = n/2^3
…
第M次查找: T(M) = n/2^M
数据规模大于等于1即 n/2^M >=1 ,说明不能再继续二分查找的操作,当数据规模达到最小值1时即n/2^M =1则是最坏的查找情况。
T(M) = n/2^M = 1 得到M=O(N)=log2n,二分查找的时间复杂度为以2为底数n为指数的对数。
/**
* 给定一个规模为n的按照数字从小到大排序的数组,快速查询x元素在数组中的位置
* 示例:
* 数组:[-1,0,3,5,9,12]
* 查找的值:9
* 输出:4
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
while(left <= right){
int mid = (right - left) / 2 + left;
int num = nums[mid];
if (num == target) {
return mid;
} else if (num > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
};