LeetCode 35.Search Insert Position

本文介绍了一种经典的二分查找算法实现方法,并通过两种不同的实现方式进行了展示:一种是传统的迭代方法;另一种则是利用递归来实现。两种方法虽然在具体实现上有所不同,但都有效地解决了在已排序数组中查找特定元素的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目

2.题意

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

3.我的解法

int searchInsert(int* nums, int numsSize, int target) {
    int fro,end,mid;
    fro=0;
    end=numsSize-1;
    while(fro<=end){
        mid=(fro+end)/2;
        if (nums[mid]<target)
            fro=mid+1;
        else if(nums[mid]>target)
            end=mid-1;
        else
            return mid;
            
    }
    return fro;
}

标准的二分查找方法,定义三个变量,分别代表左中右三个位置,每次从中间开始查找,反复更改左右位置,直到完成目标,优于100%

4.优秀解法

int searchInsert(int* nums, int numsSize, int target) {
    return recur_search(nums, 0, numsSize-1, target);
}

int recur_search(int *nums, int low, int high, int target){
    int mid = (low + high) / 2;
    if (nums[mid] == target){
        return mid;
    }
    else if (low >= high){
        return nums[mid] > target ? mid : mid + 1;
    }
    if (nums[mid] > target){
        return recur_search(nums, low, mid-1, target);
    }
    else{
        return recur_search(nums, mid+1, high, target);
    }
}

主体思想一致,但这种解法使用了递归,有参考价值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值