给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
我们先假设要插入的数为key。
这是一个顺序数组,所以我们可以将数组遍历一遍然后查找有没有相等的,有的话返回下标。
如果没有再遍历一遍一旦数组中的数字比key小就继续往后直到到最后一个比key小的数之后就是key的位置
我们也可以只只遍历一次先判断是否相等然后再判断是否比key小。
分析完之后我们就可以动手写代码了
int searchInsert(int *arr, int length,int key)
{
int i = 0;
int ret = 0;
for (i = 0; i < length; i++)
{
if (arr[i] == key) //如果找到返回下标
{
return i;
}
if (arr[i] < key)//如果小于要插入的数字记录下表不断更新
{
ret = i;
}
}
if (key>arr[0])//防止出现要插入的位置是第一个
{
return ret + 1;
}
return 0;
}
但是要注意如果数组中第一个数字就比要插入的数字大的话那插入的下标就是0;而不是ret+1