当前位置: 首页 > article >正文

算法二刷复盘|LeetCode 3474 二分查找双杀(区间边界 + 二维矩阵)

目录一、LeetCode 34在排序数组中查找元素的第一个和最后一个位置题目描述核心思路两次二分分别锁定左右边界Java 完整实现复杂度分析二、LeetCode 74搜索二维矩阵题目描述核心思路二维降维直接二分Java 完整实现复杂度分析三、两道题的二分核心对比四、二刷复盘感悟二刷二分查找把两道高频变形题放在一起复盘一道是一维排序数组的区间边界查找一道是二维有序矩阵的降维二分。都是面试常考的二分应用场景吃透这两道就能掌握二分的核心变形技巧。一、LeetCode 34在排序数组中查找元素的第一个和最后一个位置题目描述给定一个升序排列的整数数组nums和目标值target找出目标值在数组中的开始和结束位置若不存在返回[-1, -1]。要求算法时间复杂度为 O (log n)。核心思路两次二分分别锁定左右边界普通二分只能找到任意一个等于target的位置这道题的关键是边界控制找左边界当nums[mid] target时继续向左收缩右边界直到找到第一个等于target的位置找右边界当nums[mid] target时继续向右收缩左边界直到找到最后一个等于target的位置特殊处理若左边界不存在即nums[left] ! target直接返回[-1,-1]。Java 完整实现java运行class Solution { public int[] searchRange(int[] nums, int target) { int left findLeftBound(nums, target); if (left -1) { return new int[]{-1, -1}; } int right findRightBound(nums, target); return new int[]{left, right}; } // 找左边界第一个等于target的位置 private int findLeftBound(int[] nums, int target) { int left 0; int right nums.length - 1; while (left right) { int mid left (right - left) / 2; if (nums[mid] target) { left mid 1; } else if (nums[mid] target) { right mid - 1; } else { // 等于target时继续往左找收缩右边界 right mid - 1; } } // 检查边界是否越界且值是否匹配 if (left nums.length nums[left] target) { return left; } return -1; } // 找右边界最后一个等于target的位置 private int findRightBound(int[] nums, int target) { int left 0; int right nums.length - 1; while (left right) { int mid left (right - left) / 2; if (nums[mid] target) { left mid 1; } else if (nums[mid] target) { right mid - 1; } else { // 等于target时继续往右找收缩左边界 left mid 1; } } // 检查边界是否越界且值是否匹配 if (right 0 nums[right] target) { return right; } return -1; } }复杂度分析时间复杂度O (log n)两次二分查找整体仍为对数级复杂度空间复杂度O (1)原地操作无额外空间开销。二、LeetCode 74搜索二维矩阵题目描述编写高效算法判断m x n矩阵中是否存在目标值。矩阵特性每行从左到右升序排列每行第一个整数大于前一行的最后一个整数。核心思路二维降维直接二分这道题的矩阵是严格有序的将矩阵按行拼接后就是一个一维升序数组因此可以直接用普通二分解决关键是一维索引与二维坐标的转换一维索引mid对应的二维行号row mid / nn为矩阵列数一维索引mid对应的二维列号col mid % n。Java 完整实现java运行class Solution { public boolean searchMatrix(int[][] matrix, int target) { // 边界处理空矩阵/空行/空列 if (matrix null || matrix.length 0 || matrix[0].length 0) { return false; } int m matrix.length; int n matrix[0].length; int left 0; int right m * n - 1; while (left right) { int mid left (right - left) / 2; // 转换为二维坐标 int row mid / n; int col mid % n; if (matrix[row][col] target) { return true; } else if (matrix[row][col] target) { left mid 1; } else { right mid - 1; } } return false; } }复杂度分析时间复杂度O (log (m*n))与普通二分一致复杂度为对数级空间复杂度O (1)原地操作无额外空间开销。三、两道题的二分核心对比表格题目核心考点关键技巧面试高频问题34. 区间边界查找二分的边界变形两次二分区分左右边界的收缩方向如何处理 target 不存在的情况左右边界的二分模板怎么写74. 二维矩阵搜索二分的降维应用二维坐标与一维索引的转换若矩阵不严格有序如 “Z” 字形有序还能用这种方法吗四、二刷复盘感悟二分的核心是「边界控制」34 题最容易出错的就是边界处理尤其是等于target时的收缩方向以及循环结束后的边界检查。统一使用「左闭右闭」模板能大幅降低出错概率二分的本质是「有序数据的快速定位」只要数据是有序的不管是一维还是二维都可以用二分优化。74 题就是典型的将二维有序转化为一维有序再用二分解决面试常考变形拓展除了这两道「旋转排序数组的二分」「山脉数组的二分」也是高频考点掌握通用模板就能举一反三

相关文章:

算法二刷复盘|LeetCode 3474 二分查找双杀(区间边界 + 二维矩阵)

目录 一、LeetCode 34:在排序数组中查找元素的第一个和最后一个位置 题目描述 核心思路:两次二分,分别锁定左右边界 Java 完整实现 复杂度分析 二、LeetCode 74:搜索二维矩阵 题目描述 核心思路:二维降维&…...

NLP 机器翻译:从RNN到Transformer

NLP 机器翻译:从RNN到Transformer 1. 机器翻译简介 机器翻译(Machine Translation, MT)是自然语言处理(NLP)的重要任务,旨在将一种语言的文本自动翻译成另一种语言。从早期的基于规则的方法到现代的深度学习…...

C++ MCP网关架构设计图(含L1/L2缓存穿透防护+零拷贝协议栈)——全网首份通过PCI-DSS认证的生产级拓扑图解密

更多请点击: https://intelliparadigm.com 第一章:C MCP网关架构设计图总览 C MCP(Model-Controller-Protocol)网关是一种面向高并发、低延迟工业通信场景的中间件组件,其核心目标是在异构设备协议(如 Mod…...

LFM2-2.6B-GGUF快速部署:Ubuntu系统依赖(libglib2.0-0等)安装

LFM2-2.6B-GGUF快速部署:Ubuntu系统依赖(libglib2.0-0等)安装 1. 项目介绍 LFM2-2.6B-GGUF是由Liquid AI公司开发的大语言模型,经过GGUF量化处理后特别适合在资源有限的设备上运行。这个2.6B参数的模型经过量化后体积大幅缩小&a…...

Phi-3-mini-4k-instruct-gguf代码实例:curl调用/health接口与自动化集成示例

Phi-3-mini-4k-instruct-gguf代码实例:curl调用/health接口与自动化集成示例 1. 模型简介 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个模型特别适合以下应用场景: 智能问答系统文本改写与润色内容摘要生成短篇创…...

VSCode远程连接卡顿到崩溃?3个被90%开发者忽略的SSH配置致命细节

更多请点击: https://intelliparadigm.com 第一章:VSCode远程连接卡顿到崩溃的真相揭秘 VSCode 的 Remote-SSH 扩展在中大型项目或低带宽/高延迟网络环境下,常出现编辑器响应迟缓、终端假死、甚至整个窗口崩溃的现象。这并非单纯由网络质量导…...

XGBoost实战:从原理到部署的完整指南

1. XGBoost:为什么它成为机器学习竞赛的常胜将军?第一次接触XGBoost是在2016年的Kaggle竞赛中,当时超过半数的获胜方案都使用了这个算法。作为传统梯度提升树(GBDT)的进化版本,XGBoost通过一系列工程优化和…...

交通枢纽对讲广播降噪难?A-59 模块一站式解决回音、啸叫、远场拾音|嵌入式实战方案

针对高铁站、机场、地铁、客运站等交通枢纽高噪、大混响、多终端并发对讲场景,本文基于 A-59 工业级双通道语音处理模块,给出可直接量产的回音消除 双波束拾音 全双工通话解决方案,含硬件接口、典型模式、场景配置与实测效果,适…...

Arm架构UMLSLL指令解析:高效矩阵运算优化

1. UMLSLL指令深度解析:多向量无符号整数乘减操作在Arm架构的SIMD指令集中,UMLSLL(Unsigned integer Multiply-Subtract Long Long)指令是一个专门为高效矩阵运算设计的复杂操作。我第一次在Armv9的SME2扩展中见到这个指令时&…...

斑马文书AI PPT功能使用测评:AI一键生成PPT

作为常年被PPT支配的职场人,谁没熬过“找思路、扒内容、调格式”的深夜,试过不少AI PPT工具,不是生成内容跑偏,就是Word转PPT格式混乱,直到使用斑马文书AI-PPT功能,才知道什么叫做真正高效好用。接下来我从…...

00华夏之光永存:华为黄大年茶思屋难题揭榜第15期(无线领域难题第一期)·题目篇

华夏之光永存:华为黄大年茶思屋难题揭榜第15期(无线领域难题第一期)题目篇 一、引言:无线领域难题,关乎华为全球竞争力与6G话语权 在全球通信技术从5.5G向6G演进的关键期,无线通信作为华为核心主业&#xf…...

给FGUI编辑器加点料:手把手教你用Lua写一个自定义Inspector面板

给FGUI编辑器加点料:手把手教你用Lua写一个自定义Inspector面板 在UI开发领域,效率工具的价值往往被严重低估。当你第20次重复点击相同的属性面板,或是需要在不同组件间来回切换检查参数时,一个量身定制的Inspector面板能节省的时…...

从经纬度到网格码:北斗位置编码在物流轨迹压缩中的实战应用

北斗网格码在物流轨迹管理中的革命性应用 每天,全球物流系统产生数以亿计的轨迹数据点。一辆普通货运车辆每30秒记录一次位置,单日就能生成近3000条经纬度记录。传统存储方式让数据库不堪重负,而北斗网格码技术正悄然改变这一局面。 1. 物流轨…...

【算法复习】滑动窗口(同向区间指针)

滑动窗口(同向区间指针)滑动窗口是数组 / 字符串类题目里出镜率极高的套路。掌握它,能让一大批看似 O(n) 的暴力解法瞬间降到 O(n)。本文从"定长"和"变长"两个视角,配合可直接套用的模板代码,帮你…...

2024机器学习初学者必备工具与学习路线

1. 为什么初学者需要掌握这些机器学习工具?2024年对于机器学习初学者来说是个绝佳的入门时机。三年前我刚接触这个领域时,光是搭建开发环境就折腾了一周。现在这些开源工具不仅安装简单,还提供了完整的教程和社区支持。掌握它们就像获得了一套…...

别再只做展示页了!用微信小程序+Canvas给你的霍兰德职业测试加个酷炫可视化报告

用Canvas打造微信小程序的职业测试可视化报告 在移动互联网时代,用户体验已经成为产品成败的关键因素。职业性格测试类小程序如雨后春笋般涌现,但大多数测试结果展示方式千篇一律——简单的文字描述和枯燥的数据列表。这种呈现方式不仅缺乏视觉冲击力&am…...

深入STM32以太网DMA与MAC内核:如何用标准库和LWIP实现高效零拷贝网络通信

深入STM32以太网DMA与MAC内核:零拷贝网络通信实战指南 1. 底层架构解析:从硬件加速到协议栈优化 在嵌入式网络通信领域,STM32的以太网外设提供了一套完整的硬件加速方案。MAC内核与专用DMA控制器的协同工作机制,为资源受限环境下的…...

【VSCode工业级调试适配指南】:20年嵌入式老兵亲授5大硬核配置技巧,让JTAG/SWD调试效率提升300%

更多请点击: https://intelliparadigm.com 第一章:VSCode工业级调试适配的底层逻辑与演进路径 VSCode 的调试能力并非基于独立运行的调试器,而是通过标准化协议与外部调试后端协同工作。其核心是 Debug Adapter Protocol(DAP&…...

告别单一RGMII:在ZYNQ裸机下玩转PS+PL双网口设计的三种灵活架构

ZYNQ裸机双网口架构设计:从RGMII局限到三模以太网的工程实践 在工业控制、网络设备和嵌入式系统中,双网口设计已成为提升系统可靠性和功能灵活性的标配方案。ZYNQ系列SoC凭借其独特的PSPL架构,为工程师提供了多种实现双网口的可能路径&#x…...

Flux2-Klein-9B-True-V2效果展示:星空银河系天体结构科学级渲染

Flux2-Klein-9B-True-V2效果展示:星空银河系天体结构科学级渲染 1. 模型能力概览 Flux2-Klein-9B-True-V2是基于官方FLUX.2 [klein] 9B改进的文生图/图生图模型,在科学可视化领域展现出惊人潜力。这个模型特别擅长生成高精度的天体物理图像&#xff0c…...

Python调试工具全解析:从基础到高级实战

1. Python调试工具全景解析作为使用Python近十年的开发者,我深刻体会到调试环节占用了日常开发60%以上的时间。工欲善其事必先利其器,今天系统梳理Python生态中那些真正能提升排错效率的调试工具链。不同于官方文档的平铺直叙,这里会结合真实…...

UHMWPE板源头厂家哪家好

在寻找优质 UHMWPE 板源头厂家时,很多人都会感到困惑。今天,山东龙翔新材料有限公司就为大家带来一份 UHMWPE 板源头厂家排行榜,让你轻松找到靠谱的厂家。第一名:山东龙翔新材料有限公司山东龙翔新材料有限公司坐落于鲁西北历史文…...

AI试衣系统源码-一键换衣换装-支持姿态识别+纹理融合-批量生成-SAAS模式-电商创业利器

温馨提示:文末有资源获取方式在电商竞争日益激烈的今天,商品展示效果直接决定着转化率的高低。尤其是服装类目,传统的模特拍摄不仅成本高昂,而且周期长、效率低。针对这一市场难题,我们团队倾力打造了一款革命性的AI试…...

AMD Ryzen 处理器终极调校指南:RyzenAdj 完整教程

AMD Ryzen 处理器终极调校指南:RyzenAdj 完整教程 【免费下载链接】RyzenAdj Adjust power management settings for Ryzen APUs 项目地址: https://gitcode.com/gh_mirrors/ry/RyzenAdj 你是否曾经觉得自己的 AMD Ryzen 笔记本电脑性能被限制了?…...

AI换装软件源码-自研CGSY算法-一键生成模特上身效果-PHP+MySQL-开源可二开无限开账号

温馨提示:文末有资源获取方式在电商商品展示环节,服装拍摄一直是个让人头疼的问题。请模特、租影棚、后期修图,一套流程下来成本不低,上新周期还容易被拖长。最近在逛开源社区时,发现一套有意思的源码,核心…...

DLSS Swapper:5分钟掌握游戏画质与性能双重提升秘籍

DLSS Swapper:5分钟掌握游戏画质与性能双重提升秘籍 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 还在为游戏画质模糊而烦恼?是否遇到过游戏帧率不稳定的困扰?DLSS Swapper正是为你…...

视频孪生,镜像视界先行

视频孪生,镜像视界先行标杆技术,标杆案例在数字孪生高速迭代的时代,视频孪生已成为行业主流落地形态。 告别虚拟建模的伪孪生内卷,实景化、空间化、实战化成为核心趋势, 镜像视界前瞻布局、持续领跑,做到技…...

Phi-mini-MoE-instruct入门必看:4K上下文+三重指令优化模型WebUI详解

Phi-mini-MoE-instruct入门必看:4K上下文三重指令优化模型WebUI详解 1. 项目介绍 Phi-mini-MoE-instruct是一款轻量级混合专家(MoE)指令型小语言模型,在多个基准测试中表现出色。这款模型特别适合需要高效推理和精准指令遵循的应…...

5个强大Python库提升机器学习数据可视化效果

1. 机器学习数据可视化的新选择:5个小众但强大的Python库 在数据科学和机器学习项目中,可视化不仅是展示结果的工具,更是讲述数据故事的关键语言。虽然Matplotlib和Seaborn已经成为行业标配,但当我需要制作更具表现力的可视化效果…...

2026年电脑录屏软件推荐:6款神器总有一款适合你

每次想录个教程、游戏高光时刻,或是线上会议,却找不到好用的录屏工具?别急!这里整理了6款超实用的电脑录屏软件,从系统自带工具到专业软件,总有一款适合你。Xbox Game Bar:游戏玩家的首选如果你…...