LeetCode第35题
题目描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
思路
采用二分法来做。注意边界条件的处理。
源代码
int searchInsert(int* nums, int numsSize, int target){
//二分查找
int mid = numsSize / 2;
int begin = 0;
int end = numsSize - 1;
while(begin < end){
if(target == nums[mid]){
return mid;
}
else if(target < nums[mid]){
end = (mid - 1) < 0 ? (0) : (mid - 1);
mid = (begin + end) / 2;
}
else{
begin = (mid + 1) < numsSize ? (mid + 1) :(numsSize - 1);
mid = (begin + end) / 2;
}
}
if(target <= nums[begin]){
return begin;
}
else{
return (end + 1);
}
}
分析
时间复杂度为log级别,空间复杂度为常数级别。
网友评论