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

算法: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.kler.cn/a/318584.html

相关文章:

  • 鸿蒙next版开发:相机开发-元数据(ArkTS)
  • 实时渲染技术如何助力3D虚拟展厅?
  • zabbix监控端界面时间与服务器时间不对应
  • RoseTTAFold MSA_emb类解读
  • Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(1)
  • jwt用户登录,网关给微服务传递用户信息,以及微服务间feign调用传递用户信息
  • 力扣每日一题 字符串中最多数目的子序列 贪心 字符串 前缀和
  • JavaWeb--纯小白笔记06:使用Idea创建Web项目,Servlet生命周期,注解,中文乱码解决
  • 基于姿态估计算法的健身辅助应用
  • 关系型数据库 - MySQL II
  • Redis 数据同步原理
  • Go weak包前瞻:弱指针为内存管理带来新选择
  • Spring源码学习:SpringMVC(3)mvcannotation-driven标签解析【RequestMappingHandlerMapping生成】
  • notepad++的json查看
  • 8.隐私与安全 - 使用ChatGPT时的注意事项【8/10】
  • 业务安全治理
  • Vue中nextTick的底层原理
  • 【C语言】猜数字游戏
  • LeetCode146 LRU缓存
  • C++解压及压缩(window或linux下编译、使用libarchive)
  • CSS——网格布局(display: grid)之下篇
  • 评论表设计与实现(多级评论)
  • JS的基础语法
  • 在Java中如何利用ClassLoader动态加密、解密Class文件
  • 文本合成语音api接口文档
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 10 推送实况窗消息