leetcode 35. Search Insert Position

35. Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

You may assume no duplicates in the array.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0

给定一个已排序的数组和一个目标值,如果目标值存在于给定数组中,返回该值的索引(数组下标),如果目标值不存在于给定数组,返回按升序将该目标值插入给定数组时该值应该被插入位置的索引;

假设数组中无重复数字;

分析

该题两种情况下均返回数组下标,目标值存在于给定数组中时返回该值下标,目标值不存在于给定数组中时返回第一个大于目标值的位置下标,综合两种情况,只需找到第一个不小于目标值的元素的位置,返回该位置的下标即可;现在考虑两种边界情况:
- 数组的第一个元素即不小于目标值,此时返回值即为0,可以归入常规情况一并返回即可
- 数组所有元素均小于目标值,即遍历完整个数组都不能找到不小于目标值的元素,此时目标值将被插入到数组最后,即返回原数组长度即可


代码实现(C)

int searchInsert(int* nums, int numsSize, int target) {
    int iLoop = 0;

    for( ; iLoop < numsSize; iLoop++){
        if(target <= nums[iLoop]){
            return iLoop;
        }
    }

    return numsSize;
}

有两种情况直接返回数组大小:

1、数组为空,无法进入for循环,此时无论目标值为多大,直接插入该数组,返回值为0,即原数组大小

2、for循环遍历结束仍然未找到符合条件的下标,此时即为前面提到目标值大于数组中所有元素的情况,此时目标值将被插入数组最后,下标即为原数组大小

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值