leetcode35. 搜索插入位置

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

你可以假设数组中无重复元素。
示例 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

思路:可以利用二分法的方式来解答,因为在排序数组中进行搜索二分法效率高,我们定i,j来表示数组第一个元素和最后一个元素的索引,这样可以得到i和j所对应的两个数的中间那个数,索引为nMid,用nums[nMid]来和目标值target作比较,如果小于目标值,则将i的值变为nMId+1,为什么呢?因为他们的中间值num[nMid]比我们的目标值要小,nMid左边的值必定比目标值小,那不是我们要搜索的范围,我们要将搜索范围定在nMid右边,缩小范围后再进行循环搜索,同理如果大于目标值,我们就将j的值变为nMid-1,当找到和目标值相等的值时,nMid就是我们要的答案,返回就行了,但是当我们没有搜索到和目标值相等的值时,这时候我们直接返回i就行了,因为此时这个i就是我们要插入的位置。

class Solution {
public:
    int searchInsert(vector& nums, int target) {
        if(nums.empty())
            return -1;
        int nCount = nums.size();
        int i=0,j=nCount-1;
        while(i<=j)
        {
            int nMid = (i+j)/2;
            if(target > nums[nMid])
            {
                i = nMid+1;
            }
            else if(target < nums[nMid])
            {
                j = nMid-1;
            }
            else
                return nMid;
        }
        return i;
    }
};

你可能感兴趣的:(Leetcode数组,leetcode,数组,二分查找)