题目;
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
解析:寻找插入元素的位置
方法一:直接法
class Solution {
public:
int searchInsert(vector<int>& nums, int target)
{
int k=nums.size();
for(int i=0;i<k;i++)
{
if(nums[i] == target) return i;
}
for(int i=0;i<k;i++)
{
if(nums[i] > target) return i;
}
return k;
}
};
我在做的时候没有考虑周全,当两个for循环都不满足时应该return k,这一句不能落下。
方法二:二分查找法
class Solution {
public:
int searchInsert(vector<int>& nums, int target)
{
int low=0;
int high=nums.size()-1;
int mid;
while(low <= high)
{
mid=(low+high)/2;
if(nums[mid] == target) return mid;
else if(nums[mid] > target) high=mid-1;
else if(nums[mid] < target) low=mid+1;
}
return low;
}
};
注意在while循环条件中,low<=high,等于必不可少。