仅学习记录。
题目详情:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
算法思路:
二分查找
!整体思路没问题,很多细节需注意。
区间设左右都闭,左闭右开也可以。
下面写左右都闭,注意溢出要处理。(for c++)
判断情况分三种,大右小左等正中。
因为插入要推进,最终加一勿忘记。
自编话术,仅供参考。
/*
*/
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int s=nums.size();
int left=0,right=s-1;//right是长度-1,否则可能溢出,因为元素可能在所有元素之后,则需返回right+1;
while(left <= right){
//int l=(left+right)/2;
int mid = left + ( ( right - left ) / 2 );//防溢出写法
if(target > nums[mid]){
//目标值大于中间值,区域右移
left=mid+1;
}else if(target < nums[mid]){
//目标值小于中间值,区域左移
right=mid-1;
}else{
//目标值等于中间值,直接返回
return mid;
}
}
return right+1;//在所有元素之后。
}
};