LeetCode 搜索插入位置 35

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Example 1:

Input: [1,3,5,6], 5
Output: 2

Example 2:

Input: [1,3,5,6], 2
Output: 1

Example 3:

Input: [1,3,5,6], 7
Output: 4

Example 4:

Input: [1,3,5,6], 0
Output: 0

给定排序数组和目标值,如果找到目标,则返回索引。如果没有,请返回索引按顺序插入的索引。

您可以假设数组中没有重复项。

思路

二分查找的变形呀!!!

(min 与max 是查找区间,通过不断缩小查找区间,来查找x的值)

min是头指针; max是尾指针;mid = (min + max) / 2;

终止条件:min >= max

如果arr[mid] < x, min = mid + 1;

如果arr[mid] > x, max = mid - 1;

如果arr[mid] == x, 找到结果

没找到怎么办呀

返回min的值就好了,最后找到的地方是最接近的地方!!!

int searchInsert(int* nums, int numsSize, int target) {
    int min = 0, max = numsSize - 1, mid;
    while(min <= max){
        mid = (min + max) / 2;
        if(nums[mid] == target) return mid;
        if(nums[mid] > target) max = mid - 1;
        else min = mid + 1;
    }
    return min;
}

 

你可能感兴趣的:(数据结构,LeedCode,c语言)