leetcode-第35题-搜索插入位置

LeetCode 第35题:搜索插入位置 题目要求我们在一个排序数组中找到目标值的插入位置。换句话说,如果目标值存在于数组中,返回其索引;如果目标值不存在于数组中,返回它应该被插入的位置。例如:2140通过这个精准插入的过程,我们学会了如何在有序数组中高效地找到目标值的插入位置。利用二分查找的方法,我们能够在O(log n)的时间复杂度内完成搜索任务。记住,在处理这种问题时,关键是要明白二分查找的核心思想,并在找到目标值或确定目标值不存在后迅速确定插入位置。 阅读详情

博主并没有什么算法基础,所以写的不好,勿喷,抛砖引玉,欢迎交流,感谢。 

//给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 
// 你可以假设数组中无重复元素。
// 示例 1:
// 输入: [1,3,5,6], 5
//输出: 2
// 示例 2:
// 输入: [1,3,5,6], 2
//输出: 1
// 示例 3:
// 输入: [1,3,5,6], 7
//输出: 4
// 示例 4:
// 输入: [1,3,5,6], 0
//输出: 0
// Related Topics 数组 二分查找
// 👍 676 👎 0
package com.zqh.leetcode.editor.cn;

//Java:搜索插入位置
public class P35SearchInsertPosition {
    public static void main(String[] args) {
        Solution solution = new P35SearchInsertPosition().new Solution();
//        System.out.println(solution.searchInsert(new int[]{1, 3}, 0));
        System.out.println(solution.searchInsert(new int[]{1, 3}, 2));
//        System.out.println(solution.searchInsert(new int[]{1, 3}, 4));
//        System.out.println(solution.searchInsert(new int[]{1, 3, 5, 6}, 0));
//        System.out.println(solution.searchInsert(new int[]{1, 3, 5, 6}, 5));
//        System.out.println(solution.searchInsert(new int[]{1, 3, 5, 6}, 2));
//        System.out.println(solution.searchInsert(new int[]{1, 3, 5, 6}, 7));
//        System.out.println(solution.searchInsert(new int[]{1, 2, 4, 6, 7}, 3));
//        System.out.println(solution.searchInsert(new int[]{3, 5, 7, 9, 10}, 8));
//        System.out.println(1 / 2);
        // TO TEST
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int searchInsert(int[] nums, int target) {
//            方案2:二分查找法
            return find(target, nums.length, nums);
//            方案1:循环判断
//            for (int i = 0; i < nums.length; i++) {
//                判断当前数是否大于目标值,大于说明在上一个索引
//                if (nums[i] > target) {
//                    return i == 0 ? 0 : i - 1;
//                }
//                如果是等于,就直接返回当前索引
//                if (nums[i] == target) {
//                    return i;
//                }
//                这里说面目标值大于所有数组值,就是最后的长度
//                if (i == nums.length - 1) {
//                    return nums.length;
//                }
//                这里说明是在中间  345那种
//                if (nums[i + 1] > target) {
//                    return i + 1;
//                }
//            }
//            return 0;
        }

        /**
         * 二分查找
         *
         * @param searchKey
         * @return
         */
        public int find(long searchKey, int maxArraySize, int[] array) {
            int lowerBound = 0;
            int upperBound = maxArraySize - 1;
            int curIndex;
            while (true) {
                //找出中间索引坐标
                curIndex = (lowerBound + upperBound) / 2;
                if (array[curIndex] == searchKey) {
                    //刚刚好相等就直接返回当前的坐标
                    return curIndex;
                }
                if (lowerBound > upperBound) {
                    //没有找到返回最大索引
                    if (curIndex == 0) {
                        //相同的时候,说明已经是处于最后的值了,但是被夹在中间,比如[1,3] 2
                        //第一次:index=(0+1)/2=0,array[0]=1<2,lowerBound=1
                        //第二次:index=(1+1)/2=1,array[1]=3>2,upperBound=0;
                        //第三次:index=(1+0)/2=0,1>0
                        return 1;
                    }
                    return curIndex + 1;
                }
                // 判断当前索引的值小于查找值的话
                if (array[curIndex] < searchKey) {
                    //太小了,开始的标记等于中间索引+1
                    lowerBound = curIndex + 1;
                } else {
                    //太大了
                    if (curIndex == 0) {
                        //相同的时候,说明已经是处于最后的值了,但是初始
                        return 0;
                    }
                    //结束的标记等于中间索引-1
                    upperBound = curIndex - 1;
                }
            }
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
}

 

损失函数大汇总(四十三)(Boundary Loss附公式推导与代码) 摘要 Boundary Loss是一种针对图像分割任务的边界优化损失函数,特别适用于小目标、细长结构和类别不平衡场景。它通过引入真实边界的有符号距离场(SDF),将边界距离优化问题转化为区域积分形式。与Dice Loss等区域重叠损失不同,Boundary Loss更关注预测边界与真实边界的精确对齐,而非整体区域重叠。其核心公式为像素级SDF值与预测概率的乘积求和,通过梯度调整使预测概率在真实边界内部升高、外部降低。该损失通常与区域型损失(如CE或Dice)联合使用,形成"区域分割+边界修正&qu 阅读详情

相关推荐

DL-FWI基础入门培训视频学习1、2

DL-FWI基础知识

shengMio的博客 708

LeetCode 热题 第35题 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(log n)的算法。

uifmlj的博客 1738

vscode+keil嵌入式软件开发全流程

vscode+keil嵌入式软件开发全流程

AspringQ的博客 6777

力扣35题,搜索插入位置

所以我们在使用二分法的时候,当发现nums[mid] >= target时,这个nums[mid]就有可能是我们要找的值,这时我们要记录下来这个mid,再进行二分法,直到再次遇到这个情况时再更新记录,直到二分法结束。3.target在这个mid对应的值的左边但不存在在数组中,那么这个值有可能是第一个大于target的值,记录下来,直到再次遇见这个条件才更新ans,如果这个mid对应的值真的是第一个大于target的值,那么之后的二分法再也找不到满足这个条件的mid了)(等同于下一题寻找右边界)

qq_52980102的博客 342

英飞凌 TC4X MCAL之SPI中断与DMA高效传输实战

本文详细介绍了英飞凌TC4X芯片的SPI通信实战,重点讲解如何通过MCAL配置SPI中断与DMA实现高效数据传输。针对汽车电子领域的高吞吐需求,提供了从基础配置到中断处理、DMA优化的完整解决方案,包含代码示例和调试技巧,帮助开发者提升系统性能与CPU利用率。

k0l1m2n3o的博客 874

C# 调用halcon中visualize_object_model_3d显示点云

3.1 判断线程是否为空,如果为空,则新创建,如果不为空,则中断线程,清空窗口后再次执行创建操作3.2 创建:调用show()方法实例化显示类的对象,传入显示参数,将线程testvisual 绑定 在 类对象的action方法上(此处action方法内部,只调用了visualize_object_model_3d算子)3.3 启动线程。

weixin_42362219的博客 1402

LeetCode第35题_搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。

qq_40263592的博客 756

告别手动群发!用IDA Pro和CE搞定企业微信4.1.38.6011的HOOK开发(附完整代码)

本文详细介绍了如何利用IDA Pro和Cheat Engine进行企业微信4.1.38.6011的HOOK开发,实现自动化群发功能。从逆向工程环境配置、关键函数定位到HOOK框架设计,提供完整代码示例,帮助企业提升运营效率。

weixin_42533120的博客 478

LeetCode第35题,搜索插入位置

针对大厂算法面试,LeetCode第35题,搜索插入位置。

wangjiaqi333的博客 579

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

JasonH2021的博客 401

Alist/Openlist 的 WebDAV 老是连不上?别再乱试了,这才是标准答案!(1Panel如何使用Alist/Openlist作为备份账号)

😫服务器硬盘告急,想用 Alist/Openlist 的 WebDAV 备份却屡屡失败?别慌!本文带你揭秘正确的连接地址和权限配置,手把手教你搞定 1Panel 备份设置,让你的网盘秒变备份仓库!

XiaoqiangClub的博客 5572

LEETCODE35(力扣35)题:搜索插入位置(二分法)

二分查找 T35.搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5 输出: 2 示例 2: 输入: [1,3,5,6], 2 输出: 1 示例 3: 输入: [1,3,5,6], 7 输出: 4 示例 4: 输入: [1,3,5,6], 0 输出: 0 我的提交代码 class Solution { public: int sear

VegetableGirl的博客 715

VSCode 中搭建 Python 开发环境

**验证安装**:打开终端(CMD/PowerShell/终端),输入 `python --version`(Windows)或 `python3 --version`(macOS/Linux),显示版本号即成功。- **下载地址**:[Python 官网](https://www.python.org/downloads/)(选择对应系统的最新稳定版,推荐 3.8+)- **调试**:通过 `launch.json` 配置,设置断点后按 `F5` 启动,使用 `F10/F11` 控制流程。

寒寒豆豆软件公司的博客 2534

LeetCode第 35 题:搜索插入位置(C++)

35. 搜索插入位置 - 力扣(LeetCode) 简单题 class Solution { public: //检索最后一个小于等于target的元素位置 int bsearch(vector<int> &nums, int low, int high, int target){ while(low <= high){ int mid = (low+high)>>1; if(nums[mi

zj 234

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

力扣(leetcode)第35题搜索插入位置(Python)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。最后,我写了一篇MySQL教程,里面详细的介绍了MySQL的基本概念以及操作指令等内容,欢迎阅读!输入: nums = [1,3,5,6], target = 5。输入: nums = [1,3,5,6], target = 2。输入: nums = [1,3,5,6], target = 7。请必须使用时间复杂度为 O(log n) 的算法。

qq_58737789的博客 696

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

力扣35题搜索插入位置 c语言

力扣35题搜索插入位置 c语言 二分法,边界考虑清楚 int searchInsert(int* nums, int numsSize, int target){ int left = 0, right = numsSize- 1, ans = numsSize; while (left < right) { int mid = ((right - left+2)/2) + left-1; if (target <=

weixin_44349074的博客 266

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LeetCode 第35题 搜索插入位置 做题记录

LeetCode 第35题 搜索插入位置 做题记录题目描述我的解法思路对应Java代码复杂度分析更优的解法思路对应Java代码复杂度分析收获总结 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5 输出: 2 示例 2: 输入: [1,3,5,6], 2 输出: 1 示例 3: 输入: [1,3,5,6], 7 输出: 4 示例 4: 输入: [1,3,5

SOS团成员A 164

【# 力扣35题,搜索插入位置详解】

二分法的位运算的详解和力扣35题的详细思路,编程小白也能听得懂

qq_45573593的博客 347

力扣35题:搜索插入位置(二分、递归)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为。小学生一枚,自学信奥中,没参加培训机构,所以命名不规范、代码不优美是在所难免的,欢迎指正。

2501_91614020的博客 821

力扣刷题笔记 35. 搜索插入位置 C#

7月17日签到题,题目如下: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5 输出: 2 示例2: 输入: [1,3,5,6], 2 输出: 1 示例 3: 输入: [1,3,5,6], 7 输出: 4 示例 4: 输入: [1,3,5,6], 0 输出: 0 来源:力扣(LeetCode) 链接:https://leetcode-cn.c.

cjc52294的博客 267

【LeetCode 热题 100】35. 搜索插入位置——二分查找(闭区间)

这段代码同样旨在解决 “搜索插入位置 (Search Insert Position)” 的问题。它也是基于二分查找(Binary Search),但采用了另一种常见的“左闭右闭”区间模板。这个模板的搜索逻辑和边界处理与“左闭右开”版本略有不同。算法的整体思路可以分解为以下步骤:定义搜索区间:循环搜索:确定最终结果: 时空复杂度 时间复杂度:O(log N) 算法核心:该算法是二分查找。 计算依据: 与上一个版本类似, 循环的每一次迭代都会将搜索区间 的大小(即 )大约减半。 这导致循环的迭代次数与

最短的捷径就是绕远路,绕远路才是我的最短捷径。 1129

leetcode第35题搜索插入的位置

leetcode 第35题 搜索插入的位置 第一种方式: class Solution { public int searchInsert(int[] nums, int target) { //寻找要插入的值的位置 int len = nums.length; if (nums[len - 1] < target) return len; int l = 0; int r = nums.length - 1;

LIMao_link 129

力扣第35题搜索插入位置

一、题目:35. 搜索插入位置。

qq_39939541的博客 1010

LeetCode35题 搜索插入位置 C语言

LeetCode35题 搜索插入位置 C语言 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5 输出: 2 示例 2: 输入: [1,3,5,6], 2 输出: 1 示例 3: 输入: [1,3,5,6], 7 输出: 4 示例 4: 输入: [1,3,5,6], 0 输出: 0 C语言代码 #include <stdio.h> #

weixin_45356258的博客 226

LeetCode第35题思悟——搜索插入位置(search-insert-position)

LeetCode第35题思悟——搜索插入位置(search-insert-position) 知识点预告 二分查找是left、right定界的意义:left之前的数,比target小;right之后的数,比target大; 对插入位置的理解 题目要求 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重...

博采众长,自成一派; 394

【练习】【二分】力扣热题100 35. 搜索插入位置]

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。输入: nums = [1,3,5,6], target = 5。输入: nums = [1,3,5,6], target = 2。输入: nums = [1,3,5,6], target = 7。请必须使用时间复杂度为 O(log n) 的算法。

2402_86344613的博客 384
上一篇: leetcode-第58题-最后一个单词的长度
下一篇: leetcode-第28题-实现strStr()
97牛肉面
博客等级 码龄9年 54粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值