搜索插入位置

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


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


public int SearchInsert(int[] nums, int target) {
    if(nums == null || nums.Length == 0) return 0;

    int start = 0;
    int end = nums.Length - 1;
    int result = -1;
    int tempIndex = -1;

    while(start <= end)
    {
        //二分法查找位置
        tempIndex = (end + start)/2;
        if(nums[tempIndex] == target)
        {
            return tempIndex;//找到匹配
        }

        if(target > nums[tempIndex])
        {
            //去右边那半
            start = tempIndex + 1;
        }
        else
        {
            //去左边那半
            end = tempIndex - 1;
        }
    }

    //没找到匹配就是start了
    return start;
}


看似简单,其实要考虑很多情况的,start是一个往上加的指标,而目的是找一个刚好比target大的值或者是数组尾部的下一位的位置,在两指标重合时,无论是比target值大的end--,还是比target值小的start++,start值总是那个比target大的指标。所以,最后没找到的情况下,返回start指标就是要插入的位置。


首页 我的博客
粤ICP备17103704号