目录
- 题目
- 暴力
- 二分迭代
- 二分递归
题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
暴力
class Solution {
public:int searchInsert(vector<int>& nums, int target) {for(int i = 0;i < nums.size();i++){if(target <= nums[i]) return i;}return nums.size();}
};
二分迭代
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int start = 0;int end = nums.size()-1;int mid;while(start <= end){mid = (start + end)/2;if(nums[mid] == target) return mid;else if(nums[mid] > target){end = mid -1;}else{start = mid +1;}}return start;}
};
二分递归
class Solution {
public:int recur(vector<int>& nums, int start,int end,int target){if(start > end) return start;int mid = (start + end)/2;if(nums[mid] == target) return mid;else if(nums[mid] > target){return recur(nums,start,mid -1,target);}else{return recur(nums,mid +1,end,target);}return start;}int searchInsert(vector<int>& nums, int target) {return recur(nums,0,nums.size()-1,target);}
};