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

力扣刷题--数组--第三天

今天再做两道二分查找的题目,关于二分查找的知识可看我前两篇博客。话不多说,直接开干!

题目1:69.x 的平方根
题目详情:
  给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
  注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:
输入:x = 4
输出:2
示例 2:输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。提示:
0 <= x <= pow(2,31)-1

解题思路:
  看到题首先想到的估计就是暴力求解吧,循环找到最接近x的索引,写完提交发现:
在这里插入图片描述
  额,我只打败了9.07%的python3用户,哈哈哈哈,我真是个菜鸡。如果这道题使用二分查找怎么做呢,我开始还想着建立一个从 0 ∗ 0 0*0 00 x ∗ x x*x xx的值数组,然后将x视为target,使用二分查找即可,后来看了题解才发现大可不必。无需先生成一个数组。具体见代码:

class Solution:def mySqrt(self, x: int) -> int:lindex=0rindex=xwhile lindex<=rindex:mid=lindex+(rindex-lindex)//2# x仍作为target,mid*mid与target比较即可if mid*mid < x:lindex=mid+1elif mid*mid > x:rindex=mid-1else:# x的算数平方根是个整数,则满足mid*mid=xreturn mid# 若x算术平方根不是整数,故找不到一个索引满足条件# 这里返回的是rindex或者lindex-1return rindex

  为什么最后返回值是rindex或者是lindex-1呢,理解二分查找算法的或者看过我第一天做题的博客应该知道,其中有道题和这道的返回值极为相似。当跳出循环时,满足rindex<lindex且rindex+1=lindex。在lindex左边的值一定都小于x的算法平方根,lindex是第一个大于x的算法平方根的索引,因为最终取算法平方根的整数部分,故返回的应该是lindex-1。同理可以从rindex的角度推得最终返回rindex。

题目2:367. 有效的完全平方数
题目详述:
  给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。
  不能使用任何内置的库函数,如 sqrt 。

示例 1:
输入:num = 16
输出:true
解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。
示例 2:输入:num = 14
输出:false
解释:返回 false ,因为 3.742 * 3.742 = 14 但 3.742 不是一个整数。提示:
1 <= num <= pow(2,31)-1

解题思路:
  这道题和上面那道完全一样,返回值更加简单,不再详述。

class Solution:def isPerfectSquare(self, num: int) -> bool:lindex=0rindex=numwhile lindex<=rindex:mid=lindex+(rindex-lindex)//2if mid*mid > num:rindex=mid-1elif mid*mid < num:lindex=mid+1else:return Truereturn False
http://www.lryc.cn/news/344115.html

相关文章:

  • 开源即时通讯IM框架 MobileIMSDK v6.5 发布
  • React 第二十七章 Hook useMemo
  • 自己写的爬虫小案例
  • Kafka 环境搭建和使用之单机模式详细教程
  • Xamarin.Android项目使用ConstraintLayout约束布局
  • 探索Java 18:未来技术趋势与革新之路
  • 毕业论文怎么写? 推荐4个AI工具
  • JVM认识之垃圾收集算法
  • docker-compose部署gitlab
  • Colab/PyTorch - 001 PyTorch Basics
  • 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习三
  • 基于Seata实现分布式事务实现
  • adss光缆是什么意思
  • JavaScript异步编程——04-同源和跨域
  • 出差——蓝桥杯十三届2022国赛大学B组真题
  • UE5(射线检测)学习笔记
  • 语音识别的基本概念
  • OpenCV Radon变换探测直线(拉东变换)
  • 六、Redis五种常用数据结构-zset
  • FPGA第一篇,FPGA现场可编程门阵列,从0开始掌握可编程硬件开发(FPGA入门指南)
  • C#实现简单音乐文件解析播放——Windows程序设计作业2
  • Python数据爬取超简单入门
  • Dreamweaver 2021 for Mac 激活版:网页设计工具
  • 【Git】Git学习-15:分支简介和基本操作
  • 浏览器提示网站“不安全”原因及解决方法
  • Jmeter详细学习思路和教程
  • 钉钉开放平台创建企业内部H5微应用或者小程序
  • Linux中每当执行‘mount’命令(或其他命令)时,自动激活执行脚本:输入密码,才可以执行mount
  • 【网络协议】----IPv6协议报文、地址分类
  • Llama改进之——SwiGLU激活函数