Leetcode 35. 搜索插入位置(详解)

35. 搜索插入位置(点击查看原题)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 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

解题思路

1.给定的是排序数组,而且要求找到目标值,自然而然就想到了折半查找(二分查找)。
2.若查找不到则按顺序插入在数组中,这个可以使用简单的for循环,找到第一个比目标值target大的值i,将target插入在i的位置上;可能会有target大于数组所有的值的可能,所以再加上一个判断是否大于数组最大值的条件。

实现代码

int searchInsert(int* nums, int numsSize, int target){
    int left,right,mid;   
    left = 0;             //定义最左下标为记录首位
    right = numsSize-1;    //定义最右下标为记录末位
    while(left<=right)      //最左下标小于或等于最右下标
    {
        mid = (left+right)/2;    //折半,mid为中间下标
        if(nums[mid]>target)      //若查找值比中值小
        {
            right = mid-1;       //最右下标调整到中位下标小一位
        }
        else if(nums[mid]<target)  //若查找值比中值大
        {
            left = mid+1;      //最左下标调整到中位下标大一位
        }
        else if(nums[mid]=target)   //相等则返回mid
        {
            return mid;
        }
    }
    int i;                  //若查找不到,则寻找可插入位置
    for(i=0;i<numsSize;i++)  //从数组0下标位置开始查找
    {
        if(target<nums[i])   //若查找值小于nums[i]则可插入在i这个位置上,将原i值整体向后移动一位
        {
            return i;
        }
        if(target>nums[numsSize-1])  //若查找值大于数组最大值(numsSize-1为数组最后一位)
        {
            return numsSize;     //插入在最后,就是numsSize-1+1 = numsSize
        }
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值