百度说用二分法,详解二分查找算法
先补一补知识点
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int mid,left=0,right=nums.size()-1,tar=nums.size();
while(left<=right) {
mid=(left+right)/2;
if(nums[mid]>=target) {
tar=mid;
right=mid-1;
}
else if(nums[mid]<target) {
left=mid+1;
}
}
return tar;
}
};
官方给出的解答:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int n = nums.size();
int left = 0, right = n - 1, ans = n;
while (left <= right) {
int mid = ((right - left) >> 1) + left;
if (target <= nums[mid]) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/search-insert-position/solution/sou-suo-cha-ru-wei-zhi-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复杂度分析
时间复杂度:O(\log n)O(logn),其中 nn 为数组的长度。二分查找所需时间复杂度为 O(\log n)O(logn)。
空间复杂度:O(1)O(1)。我们只需要常数空间存放若干变量。