2023/01/22, 喜欢的朋友可以点赞关注订阅,感谢支持~~~
问题描述:Search Insert Position - LeetCode
1. 给定一个数值,将其插入一个有序数组,使得数组仍然维持有序,返回插入位置,
例如:Input: nums = [1,3,5,6], target = 5 Output: 2
2. 要求时间复杂度为O(logn),
解题思路:
1. 有序数组插入问题,O(logn)复杂度,使用二分法解题,
2. 二分法:
a. 设定left =0 为左指针,right = numsSize - 1 为右指针
b. 遍历数组,直到左指针超过右指针结束,
c. 左右指针更新规则为二分法常见写法,若需详细解释欢迎评论区留言~
c. 考虑特殊情况,目标值小于左指针起始或大于右指针开始,
答案c语言版本:
int searchInsert(int* nums, int numsSize, int target){
int left = 0, right = numsSize - 1;
int mid = 0;
if (target < nums[left])
return left;
if (target > nums[right])
return right + 1;
while (right >= left) {
mid = (left + right) / 2;
if (nums[mid] == target)
return mid;
if (target > nums[mid])
left = mid + 1;
else
right = mid -1;
}
return left;
}