给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。可以假设数组中无重复元素。
示例 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
这道题的思路其实很简单,轮询查找或者二分查找都可以。
但是我真的是再一次被力扣的傻逼编译器折服了。因为我用C写的代码它以允许就报了一些让我无所适从的错误,但是用VS编译一点问题都没有,我实在是很慌所以写个博客压压惊。
C:轮询实现
int searchInsert(int* nums, int numsSize, int target)
{
if (numsSize <= 0)//对数组进行判空
return 0;
int i = 0;
if (nums[i] > target)//如果要查找的数比我当前数组的第一个元素值还小,那么直接返回0
return i;
for (; i < numsSize; ++i)
{
if (nums[i] == target)//相等就返回当前下标
{
return i;
}
if (nums[i] < target && target < nums[i + 1])//大于当前元素并且小于当前元素的下一个
{
return i + 1;//返回的是当前元素的下一个的下标
}
}
return numsSize;//出循环那就是在数组内所有元素中没找到合适的位置,插到数组最后就ok
}
int main()
{
int nums[4] = {1,3,5,6};
printf("%d\n", searchInsert(nums, 4, 5));
printf("%d\n", searchInsert(nums, 4, 2));
printf("%d\n", searchInsert(nums, 4, 7));
printf("%d\n", searchInsert(nums, 4, 0));
return 0;
}

C++:二分查找实现
class Solution {
public:
int searchInsert(vector<int>& nums, int target)
{
int i = 0;
int j = nums.size()-1;
int mid = 0;
if(nums[i] > target)
return i;
while(i<=j)
{
mid = (j-i)/2 + i;
if(nums[mid] == target)
{
return mid;
}
else if(nums[mid] > target)
{
j = mid-1;
}
else
{
i = mid+1;
}
}
return i;
}
};
博客围绕LeetCode上的一道题展开,题目是在排序数组中找目标值索引,若不存在则返回插入位置。给出多个示例,解题思路有轮询查找和二分查找,还提到用C代码在力扣编译器报错,而在VS编译正常,最后给出C轮询和C++二分查找的实现方向。
191

被折叠的 条评论
为什么被折叠?



