自己写的:
class Solution
{
public:
int searchInsert(vector<int>& nums, int target)
{
int len = nums.size();
int j = 0;
for(int i = 0;i<len;i++)
{
if(nums[i] != target)
{
if(nums[i]>target)
{
j = i;
break;
}
else
{
j = len;
}
}
else
{
return i;
}
}
return j;
}
};
但是有个问题,当把代码改成这个样,就会出错,是因为什么??
int searchInsert(vector<int>& nums, int target)
{
int len = nums.size();
int j = 0;
for(int i = 0;i<len;i++)
{
if(nums[i] != target)
{
if(nums[i]>=target)
{
j = i;
break;
}
else
{
j = len;
}
}
}
return j;
}
上面代码会出现这样的结果:
二分法:对于整数有序数组进行查找
- 数组升序或者降序搜索结果返回的都是left指针
2.对于升序,寻找数组中最小的>=target的值的索引;对于降序,寻找数组中最大的<=target的值的索引
3.终止条件:while(left<=right)
//升序数组 抛弃比tartet小的
int mid = left + (right-left)/2;
if(nums[mid]>=target)
{
right = mid-1;
}
else if(nums[mid]<target)
{
left = mid+1;
}
//降序数组 抛弃比tartet大的
int mid = left + (right-left)/2;
if(nums[mid]<=target)
{
right= mid-1;
}
else if(nums[mid]>target)
{
left = mid+1;
}