[Java 算法] 二分查找

练习一 : 二分查找

704. 二分查找 - 力扣(LeetCode)

class Solution { public int search(int[] nums, int target) { int left = 0, right = nums.length-1,mid = 0; while(left<=right){ mid = left+(right-left)/2;//防止溢出 if(nums[mid] == target){ return mid; }else if(nums[mid]>target){ right = mid-1; }else{//nums[mid]<target left = mid+1; } } return -1; } }

算法原理 :

  1. 数组必须有序
  2. 每次取中间位置 , 和目标位置比较
  3. 比目标小->去右边找
  4. 比目标大->去左边找
  5. 直到找到或找不到

⭐⭐⭐练习二 : 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

class Solution { public int[] searchRange(int[] nums, int target) { int len = nums.length; int left = 0,right = len-1,mid = 0; int[] ret = {-1,-1}; if(len == 0||nums[len-1]<target||nums[0]>target){//把数组为空必免指针越界的优先级排到最高 return ret; } //找左端点 int retleft = 0; while(left<right){ mid = left+(right-left)/2; //找左端点时,如果存在则最后mid会落在left处,经过处理会让两个指针重合,退出循环,返回结果 if(nums[mid]<target){ left = mid+1; }else{ right = mid; } } //判断双指针重合处是否是端点 if(nums[left] != target){ return ret; } retleft = left; //找右端点 int retright = 0; left = 0; right = len-1;//记得恢复指针 while(left<right){ mid = left+(right-left+1)/2; //找右端点时,如果存在则最后mid会落在right处,经过处理会让left和right重合,退出循环,返回结果 if(nums[mid]<=target){ left = mid; }else { right = mid-1; } } retright = right; //经过找左端点后如果进入到寻找右端点,则数组中一定包含target,此时不需要进行判断 ret[0] = retleft; ret[1] = retright; return ret; } }

算法原理 :

找左端点 :

  • 当 mid 落在<target 处 , 要让 left 跳出非法区域(left = mid+1)
  • 当 mid 落在>=target 处 , 要让 right 移到 mid 处(right = mid),因为不能保证 mid-1 和 mid 处是否是左端点
  • 当退出本次循环时 , 还需要判断一下双指针重合位置是否是 target

找右端点 :

  • 和找左端点同理;当 mid 落在<=target 处 , 要让 left 移到 mid 处(left = mid),因为不能保证 mid+1 和 mid 处是右端点
  • 当 mid 落在>target 处 , 要让 right 跳出非法区域(right = mid-1)
  • 能进入此次循环,意味着数组中一定包含 target , 所以不需要判断双指针位置的合法性(即使数组中只有一个 target)

注意 :

  1. 循环条件 : left<right

因为当只有当两指针重合时(right == left) , 才能退出循环 , 判断合法性 ; 如果写成 left<=right , 则最后一步 right == left ==mid 时会一直死循环

  1. mid 处理过程(防止溢出和死循环)

找左端点 → 用「左中位数」:mid = left + (right - left)/2

找右端点 → 用「右中位数」:mid = left + (right - left + 1)/2

左中数 : 处理后 mid 会更靠近 left , 直到 等于 left ; 目的是让 right 主动向左收敛 , 最终重合

右中数 : 处理后 mid 会更靠近 right , 直到 等于 righr ; 目的是让 left 主动向右收敛 , 最终重合

核心模板 :

练习三 : 搜索插入位置

35. 搜索插入位置 - 力扣(LeetCode)

class Solution { public int searchInsert(int[] nums, int target) { int left = 0,right = nums.length-1,mid = 0; while(left<right){ mid = left+(right-left)/2; if(nums[mid]<target){ left = mid+1; }else{ right = mid; } } if(nums[left] < target) return right + 1; return left; } }

练习四 : x 的平方根

69. x 的平方根 - 力扣(LeetCode)

class Solution {     public int searchInsert(int[] nums, int target) {         int left = 0, right = nums.length - 1;         while (left <= right) {             int mid = left + (right - left) / 2;             if (nums[mid] == target) {                 return mid; // 找到目标,返回下标             } else if (nums[mid] < target) {                 left = mid + 1; // 目标在右侧             } else {                 right = mid - 1; // 目标在左侧             }         }         // 循环结束没找到,left 就是插入位置         return left;     } }

Read more

《开源圈聚焦的技术新作:讯飞 Astron Agent 的 “工作流编排 + MCP 工具集”,如何降低企业智能体开发门槛》

《开源圈聚焦的技术新作:讯飞 Astron Agent 的 “工作流编排 + MCP 工具集”,如何降低企业智能体开发门槛》

前引:今天我们不谈趣味互动类的小智能体,而是聚焦又一个开源的企业级智能体 “基建”—— 讯飞星辰推出的 Astron Agent。作为讯飞首个开源的企业级智能体平台,它把 AI 工作流编排、RPA 自动化、MCP 工具集打包成了可直接复用的基座,刚上线 GitHub 就拿下 6k+ Star,连科技圈都在讨论它怎么降低企业做智能体的门槛! 本文将聚焦于:与其同时开源的RPA介绍及智能体平台Astron Agent 中各个工具的详细使用                                    不是广告!不是广告!不是广告!真心推荐! 目录  【一】Astron智能体平台介绍 【二】RPA介绍 【三】Astron部署登录 (2)登录过程 (2)全程体验 【四】几个重要工具详解 (1)什么是系统/用户提示词 (2)代码节点 (3)什么时候用知识库 (4)

By Ne0inhk
OpenClaw 完全指南:部署你的 7×24 小时开源 AI 助手

OpenClaw 完全指南:部署你的 7×24 小时开源 AI 助手

【个人主页:玄同765】 大语言模型(LLM)开发工程师|中国传媒大学·数字媒体技术(智能交互与游戏设计) 深耕领域:大语言模型开发 / RAG知识库 / AI Agent落地 / 模型微调 技术栈:Python / LangChain/RAG(Dify+Redis+Milvus)| SQL/NumPy | FastAPI+Docker ️ 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案        「让AI交互更智能,让技术落地更高效」 欢迎技术探讨/项目合作! 关注我,解锁大模型与智能交互的无限可能! 📌 摘要:OpenClaw(原名 Clawdbot/Moltbot)是 2026 年 1 月爆火的开源 AI 助手项目,由 PSPDFKit 创始人

By Ne0inhk
OpenClaw开源汉化发行版:介绍、下载、安装、配置教程

OpenClaw开源汉化发行版:介绍、下载、安装、配置教程

OpenClaw开源汉化发行版:介绍、下载、安装、配置教程 🎬 背景 🦞 想要一个 100% 私有化、全中文界面的 AI 助手? OpenClaw 汉化版让你零门槛拥有! 这是 GitHub 100,000+ Stars 明星项目的开源中文发行版——不仅做了深度界面汉化(CLI + Dashboard 全中文),更实现了每小时自动同步官方更新,汉化版延迟 < 1 小时,让你既享受中文体验,又不掉队最新功能。 通过 WhatsApp、Telegram、Discord 就能指挥你的 AI 处理邮件、日历、文件,数据完全本地掌控,告别隐私焦虑。无论你是 Docker 老手还是命令行小白,3 步即可上手,本教程覆盖安装、配置、升级、

By Ne0inhk
论文阅读<Morality-Driven Mechanism Design: Application in Hierarchical Carbon Trading Markets>

论文阅读<Morality-Driven Mechanism Design: Application in Hierarchical Carbon Trading Markets>

2025 IEEE INTERNET OF THINGS JOURNAL Abstract         碳交易市场是一种通过经济激励机制来减少温室气体排放的制度设计,旨在鼓励降低碳排放,从而应对全球气候变化。在该市场中,政府根据企业上报的生产需求预先分配碳配额。然而,在此类分层市场中,配额分配与交易决策往往天然倾向于代表全局目标的高层机构,导致单个企业的利润得不到充分满足。由于企业具有内在的利己性,它们可能会夸大自身的生产需求以获取更多的碳配额。因此,通过战略互动来激励企业如实报告其生产需求至关重要。本文提出了一种基于道德驱动的两级 Min–Max 斯塔克尔伯格博弈模型,用于平衡不同主体之间的分层目标。博弈的第一层侧重于国家碳排放目标的宏观调控,而第二层则致力于最大化企业的个体利润。我们引入了一个基于道德的指标来评估企业的社会责任,以此激励企业切实遵守国家的排放要求。仿真结果表明,该模型具有更高的收敛速率,并在平衡不同主体的环境与经济目标方面表现出显著优势。 索引术语—碳排放、分层交易市场、道德、斯塔克尔伯格博弈。 I. INTRODUCTION         近年

By Ne0inhk