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

[100天算法】-x 的平方根(day 61)

题目描述

实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4
输出: 2
示例 2:输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,由于返回类型是整数,小数部分将被舍去来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sqrtx
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法1:二分法

思路

这个问题分两种情况:

  1. x 有整数平方根
  2. x 没有整数平方根

第 1 种就是最基本的二分法查找目标值,而第 2 种可以转化成寻找最右边的满足条件的值,在这个问题里,这个条件就是 target 的平方小于 x (因为题目要求结果只保留整数部分)。

  • 首先定义搜索区间为 [l, r],注意左右都是闭区间。
  • 在循环过程中,如果碰到 m 平方等于 x 就可以提前返回了。
  • 如果 m 平方小于 x,收缩左边界,如果 m 平方大于 x,收缩右边界。
  • 最后搜索区间会被缩小到只剩一个数字 n,如果 n 不是 x 的整数平方根,那么还剩两种情况:
    1. 如果 n2>x,那么 n-1 就是我们想要的结果,而由于 n 平方大于 x 时我们会收缩右边界,此时右指针会左移,刚好指向 n-1,同时结束了循环,最后我们返回右指针 r 即可。
    2. 如果 n2<x,那么 n 就是我们想要的结果,由于 n 平方小于 x 时左边界会收缩,此时左指针右移,右指针不动,依然指向 n,循环结束,最后我们还是返回右指针 r。
  • 所以循环结束后我们直接返回右指针 r 即可。

需要特别注意一下的是 0 和 1 这两个数字,不过上面的算法对这两个数字也是有效的。

复杂度

  • 时间复杂度:$O(logx)$
  • 空间复杂度:$O(1)$

代码

Python Code

class Solution(object):def mySqrt(self, x):""":type x: int:rtype: int"""l, r, m = 0, x,  0while l <= r:m = l + (r - l) // 2if m ** 2 == x: return melif m ** 2 > x : r = m - 1else: l = m + 1return r

相关文章:

  • 论文阅读—— UniDetector(cvpr2023)
  • Apache Doris (五十二): Doris Join类型 - Broadcast Join
  • Redis02-持久化策略
  • 公司团建小游戏开发小程序游戏互动小游戏
  • RK356X Android13.0 HDMI和喇叭同时出声音
  • 算法整理合集
  • R语言 复习 习题图片
  • Java 数据结构篇-实现单链表核心API
  • NOIP2023模拟12联测33 滈葕
  • 初阶JavaEE(14)表白墙程序
  • OpenCV官方教程中文版 —— 图像修复
  • ViT模型中的tokens和patches概念辨析
  • 86.Linux系统下复制进程fork(逻辑地址和物理地址)
  • Scala语言用Selenium库写一个爬虫模版
  • 【监控指标】监控系统-prometheus、grafana。容器化部署。go语言 gin框架、gRPC框架的集成
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【刷算法】求1+2+3+...+n
  • AHK 中 = 和 == 等比较运算符的用法
  • classpath对获取配置文件的影响
  • Druid 在有赞的实践
  • dva中组件的懒加载
  • ES6 ...操作符
  • JAVA 学习IO流
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • java多线程
  • JAVA多线程机制解析-volatilesynchronized
  • Object.assign方法不能实现深复制
  • Redis学习笔记 - pipline(流水线、管道)
  • spark本地环境的搭建到运行第一个spark程序
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • use Google search engine
  • vue中实现单选
  • 对JS继承的一点思考
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 配置 PM2 实现代码自动发布
  • 浅谈Golang中select的用法
  • 如何优雅地使用 Sublime Text
  • 使用 Docker 部署 Spring Boot项目
  • 我的业余项目总结
  • 学习笔记:对象,原型和继承(1)
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 数据可视化之下发图实践
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #define
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (27)4.8 习题课
  • (AngularJS)Angular 控制器之间通信初探
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐