学习时间:
2023年1月22日
题目描述:
![](https://i-blog.csdnimg.cn/blog_migrate/0a6d2b14904a57869df353cbd7967cd9.png)
题解分享:
// 作 者 : 繁 华 倾 夏
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// 力扣(LeetCode):35. 搜索插入位置
// 二分查找
int BinarySearch(int* nums, int numsSize, int key)
{
int low = 0, high = numsSize - 1, mid;
while (low <= high)//low<=high,可以让mid既能取到low,也能取到high
{
mid = (low + high) / 2;
if (nums[mid] == key)
return mid;//等于就找到了
else if (nums[mid] > key)
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
// nums:数组 numsSize:数组长度 target:目标值
int searchInsert(int* nums, int numsSize, int target) {
int pos = BinarySearch(nums, numsSize, target); // 调用二分查找函数
int i;
if (pos == -1) { // 如果没找到目标值
for (i = 0; i < numsSize; i++) { // 遍历数组
if (nums[i] > target) { // 找到第一个比target大的值,其所在下标即为目标值要插入的索引值
return i;
}
}
return i; // 还需要考虑如果for循环顺利完成循环
} // 即为目标值为最大值,此时要返回数组最大的索引值
else {
return pos; // 如果找到目标值则直接返回
}
}
// 测试用例
// 输入 nums = [1, 3, 5, 6], target = 5
// 输出 2
int main() {
int nums[] = { 1,3,5,6 };
int numsSize = sizeof(nums) / sizeof(nums[0]);
int target = 5;
int re = searchInsert(nums, numsSize, target);
printf("%d", re);
return 0;
}
【繁华倾夏】【每日力扣题解分享】【Day8】