给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
示例 4:
输入: nums = [1,3,5,6], target = 0
输出: 0
示例 5:
输入: nums = [1], target = 0
输出: 0
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 为无重复元素的升序排列数组
-104 <= target <= 104
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
很简单的一道题,二分查找
int searchInsert(int* nums, int numsSize, int target){
int left = 0,right = numsSize-1,mid;
while(right >= left)
{
mid = (right -left)/2 +left;
if(nums[mid]==target)
{
return mid;
}
else if(nums[mid] > target)
{
right = mid-1;
}
else
{
left = mid+1;
}
}
if(target>right)
return right+1;
else
return left>right?left:right;
}
另一种模式
#include<stdio.h>
int searchInsert(int* nums, int numsSize, int target){
int left = 0,right = numsSize-1,mid;
while(right >= left)
{
mid = (right -left)/2 +left;
if(nums[mid]==target)
{
return mid;
}
else if(nums[mid] > target)
{
right = mid-1;
}
else
{
left = mid+1;
}
}
if(target>right)
return right+1;
else
return left>right?left:right;
}
int main()
{
int nums[10000],l,t,i = 0;
scanf("%d",&l);
while(l--)//l为数字个数
{
scanf("%d",&nums[i]);
i++;
}
scanf("%d",&t);//t-target
int ans = searchInsert(nums,i,t);
printf("%d",ans);
}