《算法题讲解指南:优选算法-二分查找》--19.x的平方根,20.搜索插入位置

《算法题讲解指南:优选算法-二分查找》--19.x的平方根,20.搜索插入位置

🔥小叶-duck个人主页

❄️个人专栏《Data-Structure-Learning》

《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心

未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游


目录

19. x的平方根

题目链接:

题目描述:

题目示例:

解法(二分查找算法):

算法思路:

C++算法代码:

算法总结及流程解析:

20. 搜索插入位置

题目链接:

题目描述:

题目示例:

解法(二分查找算法):

算法思路:

C++算法代码:

算法总结及流程解析:

结束语


19. x的平方根

题目链接:

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

题目描述:

题目示例:

解法(二分查找算法):

算法思路:

设 x 的平方根的最终结果为 index:

分析 index 左右两边数据的特点:

  • 【0,index】 之间的元素,平方之后都小于等于 x;
  • 【index+1,x】之间的元素,平方之后都大于 x;

因此可以使用二分查找算法

C++算法代码:

class Solution { public: int mySqrt(int x) { int left = 0; int right = x; while(left < right) { int mid = left + ((long long)right - left + 1) / 2; //当right=INT_MAX时,则right - left + 1 = INT_MAX + 1而超出int最大值 //所以需要强转成long long类型 if((long long)mid * mid <= x) { left = mid; } else { right = mid - 1; } } return left; } };

算法总结及流程解析:

20. 搜索插入位置

题目链接:

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

题目描述:

题目示例:

解法(二分查找算法):

算法思路:

      分析插入位置左右两侧区间上元素的特点:设插入位置的坐标为 index

  • 【left,index-1】 内所有元素均是小于 target 的;
  • 【index,right】内所有元素均是大于等于 target 的

设 left 为本轮查询的左边界,right 为本轮查询的右边界,根据 mid 位置元素的信息,分析下一轮查询的区间:

  • 当 nums[ mid ] >= target 时,说明 mid 落在了 [ index, right ] 区间上,mid 左边包括 mid 本身,可能是最终结果,所以我们接下来查找的区间在 [ eft, mid ] 上。因此新 right 到 mid 位置,继续查找。
  • 当 nums[ mid ] < target 时,说明 mid 落在了 [ left, index - 1 ] 区间上,mid 右边但不包括 mid 本⾝,可能是最终结果,所以我们接下来查找的区间在 [ mid+ 1, right ] 上。因此,更新 left 到 mid + 1 的位置,继续查找。

直到我们的查找区间的长度变为 1 ,也就是 left == right 的时候, left 或者 right 所在的位置就是我们要找的结果。

C++算法代码:

class Solution { public: int searchInsert(vector<int>& nums, int target) { int left = 0; int right = nums.size() - 1; while(left < right) { int mid = left + (right - left) / 2; if(nums[mid] >= target) { right = mid; } else { left = mid + 1; } } if(target > nums[nums.size() - 1]) //无大于等于target的区间,需要另外处理 { return left + 1; } return left; } };

算法总结及流程解析:

结束语

      到此,19.x的平方根,20.搜索插入位置 这两道算法题就讲解完了。19.x的平方根 通过二分法确定满足条件的最大整数解,注意处理大数越界问题;20.搜索插入位置 分析目标值在有序数组中的可能位置特征,使用二分查找确定插入点,需特别处理目标值大于所有元素的情况。希望大家能有所收获!

Read more

Python小白必做的30道基础练习题(附保姆级答案解析)

这里是为 Python 真正的小白 准备的 30道超基础练习题(2026年视角),难度从输入输出 → 变量 → 条件 → 循环 → 字符串 → 列表 → 函数逐步递增。 每道题都附带: * 题目描述 * 参考答案(最简单、最清晰的写法) * 核心知识点 + 小提示(保姆级解析) 建议做法: 先自己写 10–15 分钟 → 看不懂再看答案 → 看完答案立刻自己敲一遍 → 改一改输入试试不同情况。 1–10:最基础(输入输出 + 变量 + 运算) 1. 写一个程序,打印 “Hello, Python小白!2026加油!” print("Hello, Python小白!2026加油!") 2. 定义两个变量 a=

By Ne0inhk
Hystrix - 微服务韧性演进史:从 Hystrix 到 Service Mesh

Hystrix - 微服务韧性演进史:从 Hystrix 到 Service Mesh

👋 大家好,欢迎来到我的技术博客! 💻 作为一名热爱 Java 与软件开发的程序员,我始终相信:清晰的逻辑 + 持续的积累 = 稳健的成长。 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕Hystrix这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * Hystrix - 微服务韧性演进史:从 Hystrix 到 Service Mesh 🚀 * 🧠 一、什么是微服务韧性?为何如此重要? * 📌 为什么需要韧性? * 🧱 微服务架构下的挑战 * 🏗️ 二、Hystrix 的诞生:从 Netflix 开始的熔断之旅 * 📦 Hystrix 的历史背景 * 🛠️ Hystrix 的核心机制 * 1. **熔断器模式 (Circuit Breaker)** * 2. **隔离 (Isolation)** * 3.

By Ne0inhk
玩转Python OpenCV:从命令行参数解析到银行卡卡号识别实战

玩转Python OpenCV:从命令行参数解析到银行卡卡号识别实战

在计算机视觉领域,OpenCV 是一款功能强大的开源库,而结合 Python 的命令行参数解析工具 argparse,能让我们的视觉处理程序更灵活、更通用。本文将从 argparse 基础用法讲起,逐步深入到模板匹配的经典应用——银行卡卡号识别,带你掌握从参数配置到视觉实战的完整流程。 一、argparse:让程序参数配置更灵活 在编写视觉处理程序时,我们经常需要动态调整输入路径、阈值、串口号等参数,如果每次都修改代码内部的常量,效率极低。Python 内置的 argparse 模块可以轻松解决这个问题,它能解析命令行传入的参数,让程序的参数配置脱离代码硬编码。 1. argparse 基础用法 先看一个简单的示例,理解 argparse 的核心流程: import argparse # 1. 创建 ArgumentParser 对象,作为参数解析的容器 parser = argparse.ArgumentParser() # 2. 添加参数:支持不同类型、

By Ne0inhk

如何解决Python pip Error “Preparing metadata (pyproject.toml) did not run successfully“

Python pip Error Preparing metadata pyproject.toml did not run successfully * 现象 * 发现 * 解决方法 * NumPy与Python版本兼容表 现象 python版本为3.13.5,自动安装numpy时发生报错 发现 在报错末尾我们发现有段日志 ninja: build stopped: subcommand failed. 我查到ninja是一种编译工具,类似cmake,而ninja更新速度,可能自动安装的版本numpy版本太高,所以即便是最新的ninja,也无法编译最新的numpy,从而报错。 解决方法 降低numpy的版本 NumPy与Python版本兼容表 NumPy版本兼容的Python版本>2.13.151.26.03.9-3.121.25.03.9-3.111.

By Ne0inhk