20.06.03 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

思路一:

  二分法查找

  缺点:代码量多。执行时间为思路二的一倍。

代码:

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

结果:

思路二:

  将数组数据与target一一比对,由于数组为升序,当数组数据大于target值时返回当前下标i,否则i++继续向前扫描。

代码:

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

结果:

posted @ 2020-06-03 22:52  γGama  阅读(115)  评论(0编辑  收藏  举报