35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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 |
最简单的遍历算法:
遇到大于等于target的值就跳出,返回当前下标位置
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int i;
for(i = 0; i<nums.size(); i++){
if(nums[i] >= target) break;
}
return i;
}
};
二分法查找:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int mid;
int low = 0;
int high = nums.size()-1;
while(low<=high){
mid = (low+high)/2;
if(nums[mid] == target) return mid;
else if(nums[mid] > target) high = mid - 1;
else low = mid + 1;
}
return low;
}
};
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.