Easy!

题目描述:

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

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

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

解题思路:

该题目只需要遍历一遍原数组,若当前数字大于或等于目标值,则返回当前坐标,如果遍历结束了,说明目标值比数组中任何一个数都要大,则返回数组长度n即可。

C++解法一:

1 class Solution {
2 public:
3     int searchInsert(vector<int>& nums, int target) {
4         for (int i = 0; i < nums.size(); ++i) {
5             if (nums[i] >= target) return i;
6         }
7         return nums.size();
8     }
9 };

当然,我们还可以用二分搜索法来优化我们的时间复杂度,而且个人认为这种方法应该是面试官们想要考察的算法吧。

C++解法二:

 1 class Solution {
 2 public:
 3     int searchInsert(vector<int>& nums, int target) {
 4         if (nums.back() < target) return nums.size();
 5         int left = 0, right = nums.size() - 1;
 6         while (left < right) {
 7             int mid = left + (right - left) / 2;
 8             if (nums[mid] == target) return mid;
 9             else if (nums[mid] < target) left = mid + 1;
10             else right = mid;
11         }
12         return right;
13     }
14 };