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

算法:69.x的平方根

题目

链接:leetcode链接

在这里插入图片描述

思路分析(二分算法)

当然你可以使用暴力查找,但是二分算法的时间复杂度更好。

我们先用暴力查找找点灵感

x :1 2 3 4 5 6 7 8
x2:1 4 9 16 25 36 49 64

我们的目的是找到一个x使得x2恰好小于target
观察x2序列,我们可以发现分成两部分,一边 <= target,另一边大于 target,
由此,我们就发现了二段性,于是理所当然使用二分算法。

一些细节问题

1、这里使用的是寻找右边界的二分算法,left < right , mid = left + (right - left + 1) / 2;
2、target的范围是int,但mid * mid可能超出int的范围,需要把mid设置成long long类型
3、right - left + 1,因为这里出现了 + 1,所以可能超出int的范围,所以left就不从0开始,从1开始即可,对0进行特判即可。

代码

 int mySqrt(int x) {if(x == 0)return 0;int left = 1,right = x -1;while(left < right){long long mid = left + (right - left + 1) / 2;if(mid * mid <= x) left = mid;else right = mid - 1;}return left;}

http://www.mrgr.cn/news/35311.html

相关文章:

  • nuxt3添加wowjs动效
  • <项目代码>YOLOv8 番茄识别<目标检测>
  • Linux中.NET读取excel组件,不会出现The type initializer for ‘Gdip‘ threw an exception异常
  • 力扣 二叉树的直径-543
  • vue3设置第三方组件 样式::v-deep
  • Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III
  • 深入剖析链表反转:多语言实现与高级语法特性20240924
  • 【环境搭建】MySQL安装部署
  • 04 面部表情识别:Pytorch实现表情识别-表情数据集训练代码
  • 论文研读——《RF-Diffusion: Radio Signal Generation via Time-Frequency Diffusion》
  • Proteus如何添加数码管
  • [3]Opengl ES着色器
  • 物理学基础精解【14】
  • AI写论文哪个平台好用?吐血总结10个AI论文写作工具
  • 【python篇】python pickle模块一篇就能明白,快速理解
  • C语言练习:通讯录
  • 电脑共享同屏的几种方法分享
  • windows桌面管理软件推荐:一键整理桌面!美化电脑桌面小助手!
  • 【MySQL】regexp_replace在MySQL以及regexp extract all在MySQL的用法
  • 如何修改音频的音量增益
  • 力扣 中等 92.反转链表 II
  • std::make_unique小结
  • 【Qt】背景介绍
  • 【代码笔记】
  • Java解决同构字符串问题
  • file zilla server安装以后,client连接,账号登录成功,但是读取目录失败的处理