【力扣每日一题04】数组篇--搜索插入位置

今天的题目,利用的是二分查找原理。很不幸我又没做出来,但是也很高兴发现自己的不足~

一、题目

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

示例 1:

复制代码
输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

复制代码
输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

复制代码
输入: nums = [1,3,5,6], target = 7
输出: 4

二、思路解析

由于官方答案我看不明白,因此找了另一种比较便于理解的做法。

二分查找相信各位都在 C 语言学过,只是忘得七七八八了。

这个解法首先要定义三个变量:left 、 right 、 mid .

并分别赋值为 left = 0; right = nums.length-1 ;

mid 的定义先卖个关子,放到后面再说。

这点搞定之后,接下来只要理解概念,剩下的就很简单了。

分三种情况,nums[mid] == target 、 nums[mid] <= target 和 nums[mid] >mid ;

第一种情况,证明我们找到了,直接返回 mid 就行了,因为此时 mid 正好是插入元素的下标

第二种情况,则说明 mid 给的值还太小了,我们让 left ++,稍后再做解释

第三种跟第二种大差不差,mid 过大,我们先让 right --。

完成之后,我们再把这个过程循环一遍,同时,在 循环中定义变量 mid = ( right + left ) /2 ;

即可大功告成。

三、完整代码

复制代码
class Solution {
    public int searchInsert(int[] nums, int target) {
        int left = 0;
        int right = nums.length-1;
        

        while(left<=right){

        int mid = (left+right)/2;

        if(nums[mid]==target) {
            return mid;
        }

        else if(nums[mid]<=target){
            left  = mid+1;
         }
            
        else {
             right = mid-1;
         }
        }


    return left;
    }
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

相关推荐
柳鲲鹏32 分钟前
地图影像匹配:基于特征匹配的视觉定位2,python
开发语言·python
努力成为包租婆33 分钟前
uniapp--原生插件开发
java·数据库·uni-app
海南java第二人2 小时前
Spring MVC核心流程深度解析:从请求到响应的完美掌控
java·springmvc
未来之窗软件服务2 小时前
幽冥大陆(一百10)PHP打造Java的Jar安全——东方仙盟筑基期
java·php·phar·仙盟创梦ide·东方仙盟
郝学胜-神的一滴2 小时前
深入理解网络IP协议与TTL机制:从原理到实践
linux·服务器·开发语言·网络·网络协议·tcp/ip·程序人生
Mixtral4 小时前
2026年春招复盘记录工具测评:告别手动整理,AI自动生成求职总结
人工智能·面试·职场和发展·语音转文字·ai语音转文字
程序猿_极客5 小时前
【2025 年最新版】Java JDK 安装与环境配置教程(附图文超详细,Windows+macOS 通用)
java·开发语言·windows·macos·jdk
猫头虎5 小时前
macOS 双开/多开微信WeChat完整教程(支持 4.X 及以上版本)
java·vscode·macos·微信·编辑器·mac·脚本
一个不知名程序员www8 小时前
算法学习入门 --- 哈希表和unordered_map、unordered_set(C++)
c++·算法
二哈喇子!8 小时前
BOM模型
开发语言·前端·javascript·bom