题目描述
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
题目思路
代码 C++
- 思路一、二分查找,递归实现
class Solution {
public:
int searchInsert(vector& nums, int target) {
return BinarySearch(nums, 0, nums.size()-1, target);
}
int BinarySearch(vector& nums, int left, int right, int target){
if(left <= right){
int indexOfmed = (left + right) / 2;
int med = nums[indexOfmed];
if(target < med){
return BinarySearch(nums, left, indexOfmed-1, target);
}
else if(target > med){
return BinarySearch(nums, indexOfmed+1, right, target);
}
else{
return indexOfmed;
}
}
else{
return left;
}
}
};
- 思路二、二分查找,循环方法实现
class Solution {
public:
int searchInsert(vector& nums, int target) {
int left = 0;
int right = nums.size()-1;
while(left <= right){
int med = (left+right)/2;
if(target < nums[med]){
right = med-1;
}
else if(target > nums[med]){
left = med+1;
}
else{
return med;
}
}
return left;
}
};