Leetcode 35搜索插入位置 c语言100%实现

【题目】

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 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

【思路】

首先想到的是一遍遍历O(n)暴力破解

1 int searchInsert(int* nums, int numsSize, int target){
2     int i = 0;
3     for(; i < numsSize; i++) {
4         if (target <= nums[i])
5             return i;
6     }
7     return i;
8 }

执行用时超过97.68%……不爽

然后去想用二分搜索,因为原数组有序

 1 int searchInsert(int* nums, int numsSize, int target){
 2     int low = 0, high = numsSize-1, mid;
 3     while(low <= high) {
 4         mid = (low + high) / 2;
 5         if (target == nums[mid])
 6             return mid;
 7         else if (target < nums[mid])
 8             high = mid - 1;
 9         else
10             low = mid + 1;
11     }
12     return low;
13 }

【BUG分析】

啊啊啊二分搜索判断条件是low <= high我每次都写成<

之后的加一减一还是记不住1551

 

posted @ 2020-04-24 11:07  剑寒江雪明  阅读(262)  评论(0)    收藏  举报