LeetCode进阶之路( Search Insert Position)

本文介绍了一种在有序数组中查找目标值并确定其位置的方法。若目标值不存在,则给出适当的插入位置。采用二分查找法高效实现此功能。

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

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

题目:在一个有序数列中寻找目标值target,如果能找到,返回该值的位置;如果找不到,返回该插入的位置。

思路:用二分法找。

public int searchInsert(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        if(target < nums[left]) {//小于最小值,该插入0位置
            return 0;
        }
        
        if(target > nums[right]) {//大于最大值,该插入最后一个位置
            return nums.length;
        }
        
        while(left <= right) {
            int mid = (right + left)/2;
            if(nums[mid] == target) {//恰好是中间值,返回mid
                return mid;
            } else if(nums[mid] > target && nums[mid-1] < target) {//如果小于中间值,且大于前一位,返回mid
                return mid;
            } else if(nums[mid] < target && nums[mid+1] > target ) {//如果大于中间值,且小于后一位,返回mid+1
                return mid+1;
            }
            
            if(nums[mid] > target) {//继续二分发寻找合适的位置
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return 0;
    }

种一棵树最好的时间是十年前,其次是现在!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值