Leetcode算法练习:搜索插入位置

Leetcode算法练习:搜索插入位置

【前言】:数据结构与算法经典问题 – 折半查找算法知识点巩固,通过这道题的练习可以进一步加深对折半查找设计思想的理解,同时能够在今后遇到类似的问题能够灵活运用所学的知识;
题目链接跳转

代码展示(AC代码)

class Solution {
    public int searchInsert(int[] nums, int target) {
        int len = nums.length;
        int left = 0;
        int right = len-1;
        int mid;

        //能够查找到的情形,通过折半查找法即可求出target在数组中的元素
        while(left<right){
            mid = (left+right)/2;
            if(nums[mid]>target){//当前查找的元素大小比目标值大右指针向左移动
                right = mid-1;
            }else if(nums[mid]<target){//当前查找的元素大小比目标值小做指针向右移动
                left = mid+1;
            }else{//存在该元素,返回对应的下标
                return mid;
            }
        }

        //没有查找到的情形,但是left指针指向的元素的结果是非常接近目标结果的
        if(nums[left]>=target){//如果left指针指向的元素结果不小于目标值,则插在left指针的前面
            return left;
        }
        return left+1;//反之插在left指着指向元素后面
    }
}

思路解读

  1. 涉及知识点:折半查找算法
  2. 这道题的出来的结果无外乎是两种情形,一种是目标元素 t a r g e t target target 在数组 n u m s nums nums 中,另一种情形就是目标元素不在数组中;(1)假设目标元素 t a r g e t target target 是在数组 n u m s nums nums ,则通过折半查找算法即可找到该元素在数组的下标。(2)假设目标元素 t a r g e t target target 不在数组 n u m s nums nums。在数组查找不到目标元素我们找到最后一轮折半查找时 l e f t left left 指针所指向的元素。而此时 l e f t left left 指针指向的元素是最接近目标元素 t a r g e t target target 的大小的。
  3. 此时我们根据 n u m s [ l e f t ] nums[left] nums[left] t a r g e t target target 的大小情况进行分类讨论,如果 n u m s [ l e f t ] > t a r g e t nums[left]>target nums[left]>target,则 l e f t + 1 left+1 left+1 为元素插入的位置 ,如果 n u m s [ l e f t ] < = t a r g e t nums[left]<=target nums[left]<=target ,则 l e f t left left 为元素插入的位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值