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 };
结果: