35. Search Insert Position 搜索插入位置

题目链接
tag:

  • easy

question:
  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

思路:

  1. 解法一
      这道题很简单,三行代码可以搞定,只要遍历一遍原数组,若当前数字大于或等于目标值,则返回当前坐标,如果遍历结束了,说明目标值比数组中任何一个数都要大,则返回数组长度n即可,代码如下:
class Solution {
public:
    int searchInsert(vector& nums, int target) {
        for (int i=0; i= target) return i;
        }
        return nums.size();
    }
};
  1. 解法二
      还可以用二分法来优化时间复杂度,而且这种方法应该是面试官们想要考察的算法吧,代码如下:
class Solution {
public:
    int searchInsert(vector& nums, int target) {
        if (nums.back() < target) return nums.size();
        int left = 0, right = nums.size() - 1;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] == target) return mid;
            else if (nums[mid] < target) left = mid +1;
            else right = mid;
        }
        return right;
    }
};

你可能感兴趣的:(35. Search Insert Position 搜索插入位置)