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

LeetCode 69. x 的平方根:两种解法详解

LeetCode 上的经典基础题——69. x 的平方根。这道题看似简单却能很好地考察我们对基础算法的理解尤其是循环和二分查找的应用。题目要求很明确给定一个非负整数 x计算它的算术平方根返回整数部分舍去小数并且不能使用任何内置指数函数和算符比如 pow(x, 0.5) 或 x ** 0.5。一、题目核心解读先再明确一下题目边界和要求避免踩坑输入 x 是非负整数0、1、2、3…所以不需要处理负数场景返回值是算术平方根的整数部分比如 x8平方根是2.828…返回2x4返回2x0返回0核心限制不能用内置指数相关方法只能靠基础的循环、判断实现。这道题的核心本质找到最大的整数 res使得 res² ≤ x 且 (res1)² x。所有解法都是围绕这个核心展开的只是效率不同。二、解法一暴力循环简单易理解适合入门1. 思路分析暴力循环的思路非常直观从1开始逐个遍历找到满足 res² ≤ x 的最大整数。但这里有个小优化——我们不需要遍历到 x因为一个数的算术平方根最大不会超过它的一半除了0和1。比如 x100平方根是10刚好是100的一半x101平方根约10.05也不超过50101/2≈50.5。所以遍历范围可以缩小到 1 到 x/2减少循环次数。特殊处理当 x0 时直接返回0因为0的平方根是0当 x1 时x/20.5循环不会执行此时res初始化为1刚好返回正确结果。2. 完整TS代码functionmySqrt_1(x:number):number{if(x0)return0;letres1;for(leti1;ix/2;i){if(i*ix){resi;}}returnres;};3. 优缺点分析优点逻辑简单代码量少容易上手适合刚接触算法的同学理解题目核心缺点效率较低时间复杂度是 O(√x)虽然遍历到x/2但本质还是和平方根成正比。当x很大时比如x2³¹-1即最大的32位非负整数循环次数会非常多可能导致超时。三、解法二二分查找高效最优面试首选既然暴力循环效率不高我们可以用二分查找来优化。二分查找的核心是“缩小查找范围”每次排除一半的无效数据时间复杂度可以降到 O(log x)是这道题的最优解法也是面试中常考的思路。1. 思路分析首先确定查找范围左边界 left0右边界 right 我们可以优化为 Math.max(x 1, 1)。这里的 x 1 是位运算等价于 Math.floor(x/2)比直接除以2更高效而 Math.max(…, 1) 是为了处理 x1 的情况此时x10right设为1避免查找范围出错。然后进行二分循环计算中间值 mid (left right) 1同样用位运算优化等价于 Math.floor((leftright)/2)判断 mid² 与 x 的关系如果 mid² ≤ x说明 mid 可能是我们要找的结果但还可能有更大的数满足条件所以更新 resmid同时将左边界 left 右移leftmid1继续查找右半部分如果 mid² x说明 mid 太大了需要缩小范围将右边界 right 左移rightmid-1循环结束条件left right此时 res 就是满足条件的最大整数即算术平方根的整数部分。2. 完整TS代码functionmySqrt(x:number):number{letleft0;letrightMath.max(x1,1);letres0;while(leftright){constmid(leftright)1;if(mid*midx){leftmid1;resmid;}else{rightmid-1;}}returnres;};3. 关键细节优缺点关键细节为什么用 mid * mid 不会溢出在TS中number类型是64位浮点数对于x≤2³¹-1LeetCode题目中的输入范围mid最大是 (2³¹-1)/2 ≈1e9mid²≈1e18而64位浮点数可以表示的整数范围远大于这个值所以不会溢出。如果是其他语言比如Java可能需要用 long 类型避免溢出这里TS不需要担心。优点效率极高时间复杂度 O(log x)即使x是最大的非负整数循环次数也只有30次左右不会超时缺点逻辑比暴力循环稍复杂需要理解二分查找的“缩小范围”思路新手可能需要多调试几次。四、两种解法对比实战建议解法时间复杂度空间复杂度适用场景暴力循环O(√x)O(1)入门理解题目、x较小的场景二分查找O(log x)O(1)面试、x较大的场景推荐五、总结与解题感悟综上所述LeetCode 69. x 的平方根作为一道基础且经典的算法题型在算法学习与面试考核中均占据重要地位。从算法学习维度来看该题目无需依赖复杂数据结构与高级算法思想是检验开发者对循环逻辑、二分查找两大基础算法掌握程度的核心载体既能帮助新手快速建立算法解题思维也能让有一定基础的开发者巩固核心知识点、梳理算法优化逻辑。从面试场景来看该题目是大厂面试中考察基础算法思维的高频题型面试官不仅关注解题代码的正确性更注重开发者对不同解法的选择逻辑、时间复杂度与空间复杂度的分析能力以及对边界场景的处理细节而本题的两种核心解法暴力循环与二分查找恰好能全面展现开发者的基础算法素养与问题优化能力。此外该题目还具备极强的延伸性其核心解题思想可迁移至平方根相关的拓展题型进一步体现了其作为基础题目的实用价值与学习意义。

相关文章:

LeetCode 69. x 的平方根:两种解法详解

LeetCode 上的经典基础题——69. x 的平方根。这道题看似简单,却能很好地考察我们对基础算法的理解,尤其是循环和二分查找的应用。题目要求很明确:给定一个非负整数 x,计算它的算术平方根,返回整数部分(舍去…...

Wan2.2-I2V-A14B网络协议分析:图像生成请求的完整生命周期

Wan2.2-I2V-A14B网络协议分析:图像生成请求的完整生命周期 1. 引言:为什么需要了解网络协议 当你点击"生成"按钮时,Wan2.2-I2V-A14B模型背后发生了什么?作为开发者,理解图像生成请求在网络层面的完整生命周…...

Qwen3-0.6B-FP8快速上手:用Chainlit打造专属聊天机器人实战

Qwen3-0.6B-FP8快速上手:用Chainlit打造专属聊天机器人实战 1. 准备工作与环境检查 1.1 了解Qwen3-0.6B-FP8模型 Qwen3-0.6B-FP8是Qwen系列最新一代的语言模型,采用FP8精度优化,在保持高性能的同时显著降低计算资源需求。这个60亿参数的模…...

STM32上跑矩阵运算老是卡死?可能是你没避开CMSIS-DSP库的这些‘坑’

STM32上跑矩阵运算老是卡死?可能是你没避开CMSIS-DSP库的这些‘坑’ 当你第一次在STM32上尝试使用CMSIS-DSP库进行矩阵运算时,那种兴奋感很快就会被现实浇灭——程序莫名其妙地卡死、计算结果全错,或者性能远低于预期。这不是你的错&#xf…...

VibeVoice语音助手搭建教程:支持10分钟长文本,会议纪要秒变语音

VibeVoice语音助手搭建教程:支持10分钟长文本,会议纪要秒变语音 你有没有过这样的经历?深夜加班整理完一份长达十几页的会议纪要,领导突然发来消息:“小王,把会议重点录个语音版,明早发给团队。…...

解决AI人像风格不稳定:造相-Z-Image-Turbo亚洲美女LoRA实战体验

解决AI人像风格不稳定:造相-Z-Image-Turbo亚洲美女LoRA实战体验 1. 为什么需要LoRA技术? 在AI图像生成领域,风格一致性一直是困扰开发者和用户的难题。传统模型生成的人像往往存在以下问题: 风格漂移:同一组提示词在…...

OBS多平台直播插件:为什么选择obs-multi-rtmp进行同步推流?

OBS多平台直播插件:为什么选择obs-multi-rtmp进行同步推流? 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾经想过,如何将你的直播内容同时推…...

ViT图像分类-中文-日常物品实战教程:中文标签本地化翻译与多语言扩展方法

ViT图像分类-中文-日常物品实战教程:中文标签本地化翻译与多语言扩展方法 想用AI模型识别你手机里的照片,却苦于模型只认识英文标签?比如,你拍了一张“包子”的照片,模型却告诉你这是“steamed stuffed bun”。今天&a…...

Krita AI绘画插件终极指南:从零开始掌握AI图像生成艺术

Krita AI绘画插件终极指南:从零开始掌握AI图像生成艺术 【免费下载链接】krita-ai-diffusion Streamlined interface for generating images with AI in Krita. Inpaint and outpaint with optional text prompt, no tweaking required. 项目地址: https://gitcod…...

深入理解分布式唯一ID:从原理到实战,一篇讲透Snowflake

深入理解分布式唯一ID:从原理到实战,一篇讲透Snowflake 一、为什么我们需要“唯一ID”? 先从一个最简单的场景说起:你有一个订单系统,每天产生几百万条订单记录。如果只用数据库的自增主键,当系统拆分成多个…...

Steam成就管理神器:3分钟掌握SAM的完全使用指南

Steam成就管理神器:3分钟掌握SAM的完全使用指南 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager Steam Achievement Manager(简称SA…...

终极指南:用TegraRcmGUI轻松解锁Nintendo Switch的无限潜力

终极指南:用TegraRcmGUI轻松解锁Nintendo Switch的无限潜力 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 还在为Nintendo Switch的封闭系统感到…...

3步搞定专业歌词制作:LRC Maker终极指南

3步搞定专业歌词制作:LRC Maker终极指南 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 还在为制作歌词时间轴而烦恼吗?想要让歌词与音乐完美…...

告别手动同步!用Karmada实现跨集群应用一键分发(附PropagationPolicy配置详解)

告别手动同步!用Karmada实现跨集群应用一键分发(附PropagationPolicy配置详解) 在云原生技术快速发展的今天,企业往往需要管理分布在多个地域、不同环境的Kubernetes集群。传统的手工同步方式不仅效率低下,还容易出错。…...

ollama部署Phi-4-mini-reasoning代码实例:Python调用+API封装教程

ollama部署Phi-4-mini-reasoning代码实例:Python调用API封装教程 你是不是也遇到过这样的问题:想快速体验一个轻量但推理能力强的模型,又不想折腾复杂的环境配置?或者手头有个小项目需要嵌入数学推理能力,但大模型太重…...

MATLAB数值计算与百川2-13B模型在科学数据分析中的协同

MATLAB数值计算与百川2-13B模型在科学数据分析中的协同 做科研或者工程计算的朋友,对MATLAB肯定不陌生。它就像我们手里的“瑞士军刀”,矩阵运算、信号处理、仿真建模,样样在行。但不知道你有没有过这样的感觉:数据算完了&#x…...

AIGC 动态图表生成:从零到一实战指南

1. 为什么需要AIGC动态图表生成? 在日常工作中,我们经常需要将枯燥的数据转化为直观的图表。传统方式需要手动编写HTML、JS和ECharts代码,不仅耗时耗力,还容易出错。我曾经为了调整一个饼图的标签位置,花了整整一上午…...

【K8s】【笔记】----- 第一章 :Kubernetes 介绍

【K8s】【笔记】----第一章:Kubernetes 介绍 【K8s】【笔记】----第二章:Kubernetes 集群环境搭建 【K8s】【笔记】----第三章:Kubernetes 资源管理 【K8s】【笔记】----第四章:Kubernetes 实战入门 【K8s】【笔记】----第五章&am…...

Redis怎样降低布隆过滤器的误判率

布隆过滤器误判率由初始capacity决定,超载会导致误判率飙升;应按峰值数据1.3~1.5设capacity,BF.INFO中items/capacity>0.8需重建;扩容优先增capacity而非k,批量插入必用BF.MADD。误判率超预期&a…...

WorkshopDL终极指南:如何免费下载1000+款Steam创意工坊模组

WorkshopDL终极指南:如何免费下载1000款Steam创意工坊模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为GOG或Epic平台游戏无法使用Steam创意工坊模组而烦恼…...

GetQzonehistory:你的QQ空间数字记忆终极备份方案

GetQzonehistory:你的QQ空间数字记忆终极备份方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,我们的记忆分散在各个社交平台,QQ空间作…...

mysql如何对比备份数据与线上数据_编写自动化校验脚本

用mysqldump生成可比对备份需加--skip-extended-insert、--order-by-primary、--skip-comments、--no-tablespaces四参数;线上数据须用mysql -N -s -r直连导出TSV,再转为同格式INSERT后diff比对。用 mysqldump 生成可比对的备份快照直接拿原始 mysqldump…...

Kook Zimage真实幻想Turbo快速部署教程:24G显存跑满1024×1024高清输出

Kook Zimage真实幻想Turbo快速部署教程:24G显存跑满10241024高清输出 想用个人电脑的显卡,快速生成那种充满梦幻感、光影细腻的幻想风格人像吗?今天要介绍的这个项目,或许能让你眼前一亮。 Kook Zimage真实幻想Turbo&#xff0c…...

OpenClaw本地部署指南|nanobot镜像预置GPU监控Dashboard(Grafana+Prometheus模板)

OpenClaw本地部署指南|nanobot镜像预置GPU监控Dashboard(GrafanaPrometheus模板) 1. 项目简介 nanobot是一款受OpenClaw启发的超轻量级个人人工智能助手,仅需约4000行代码就能提供核心代理功能,比传统方案的代码量减…...

Matplotlib数据可视化实战:从基础图表到高级定制

1. Matplotlib入门:为什么选择这个可视化工具? 第一次接触数据可视化时,我被各种工具搞得眼花缭乱。Excel、Tableau、Power BI...直到遇见Matplotlib,才发现这个Python库才是数据分析师的"瑞士军刀"。它最大的优势就是…...

嵌入式AI边缘部署雏形:STM32与PyTorch服务器协同的物体识别系统设计

嵌入式AI边缘部署雏形:STM32与PyTorch服务器协同的物体识别系统设计 1. 引言:当单片机遇上AI服务器 想象一下这样的场景:一个巴掌大的STM32开发板通过摄像头捕捉图像,瞬间将画面传送到云端服务器进行AI分析,再根据识…...

tao-8k嵌入模型实战:如何用WebUI轻松实现文本语义相似度计算

tao-8k嵌入模型实战:如何用WebUI轻松实现文本语义相似度计算 1. 引言:从文本到向量的魔法 你有没有想过,计算机是如何“理解”两句话意思差不多的?比如,“今天天气真好”和“阳光明媚的一天”,我们人类一…...

5个必学技巧:用EldenRingFPSUnlockAndMore彻底解锁《艾尔登法环》体验

5个必学技巧:用EldenRingFPSUnlockAndMore彻底解锁《艾尔登法环》体验 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh…...

从编译错误到成功仿真:记录我调试MIT Mini Cheetah源码时遇到的3个典型问题

从编译错误到成功仿真:记录我调试MIT Mini Cheetah源码时遇到的3个典型问题 调试MIT Mini Cheetah开源代码的过程,就像是在解一道复杂的数学题——每一步都可能隐藏着意想不到的陷阱。作为一个曾经在这个项目上耗费了整整两个周末的开发者,我…...

如何在一台电脑上实现多人分屏游戏:Nucleus Co-Op终极指南

如何在一台电脑上实现多人分屏游戏:Nucleus Co-Op终极指南 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾梦想与朋友在同一台…...