问题:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
我的思路:
第一步:将数组元素逐一与 target 比较,如若有相同的情况,那么返回该元素下标;
第二步:如果没有相同的情况,那么将数组元素逐一与 target 比较,首次出现比 target 大的那个元素的下标被返回。(因为是已经排序的无重复元素的数组!)
注意点:如果 return 出现判断语句、循环语句中时,很有可能不满足判断、循环的条件,造成函数没有返回值,所以在所有的判断、循环语句外面一定要单独加一句函数返回值!!!
/*我的解答*/
#include<stdio.h>
#include<stdlib.h>
int searchInsert(int* nums, int numsSize, int target);
void main()
{
int nums[6]={1,3,5,6,8,0};
int result;
result=searchInsert(nums,6,2);
printf("%d\n",result);
system("pause");
}
int searchInsert(int* nums, int numsSize, int target)
{
int i;
for(i=0;i<numsSize;i++)
{
if(nums[i]==target)
{
return i; //如果存在相等的,返回该元素下标
}
}
for(int j=0;j<numsSize;j++)
{
if(nums[j]>target)
{
return j; //如果没有相等的(并且是无重复已排序数组),那么返回首次出现比target值大的那个元素的下标(因为target即将代替该元素!)
}
}
return numsSize; //避免函数没有返回值(即target比数组中任何一个元素都大,那么该元素放在数组最后一位!)
}
优化的代码:
想法来源于两个for循环可以合并成为一个。
#include<stdio.h>
#include<stdlib.h>
int searchInsert(int* nums, int numsSize, int target);
void main()
{
int nums[6]={1,3,5,6,8,0};
int result;
result=searchInsert(nums,6,2);
printf("%d\n",result);
system("pause");
}
int searchInsert(int* nums, int numsSize, int target)
{
int i;
for(i=0;i<numsSize;i++)
{
if(nums[i]>=target)
{
return i; //如果存在相等或首次大于target的元素,返回该元素下标!
}
}
return numsSize;
}