求一个非负整数的平方根

  • 题目描述
  • 直接想法
  • 进阶思考

题目描述

给定一个非负整数 x ,计算并返回 x 的平方根,即实现 int sqrt(int x) 函数。
正数的平方根有两个,只输出其中的正数平方根。
如果平方根不是整数,输出只保留整数的部分,小数部分将被舍去

示例 1:
输入: x = 4
输出: 2

示例 2:
输入: x = 8
输出: 2
解释: 8 的平方根是 2.82842…,由于小数部分将被舍去,所以返回 2

提示:
0 <= x <= 231 - 1

直接想法

由于题目中提到了是非负整数x,则它的平方根一定小与等于自己。不难想到,从1开始,到这个数为止,循环计算,当i * i大于这个数时,上一次算出的i即为我们要找的平方根。
代码如下:

 public int MySqrt(int x){int result = 0;for (int i = 1; i <= x; i++){if (i * i <= x) result = i;else return result;}return result;}

进阶思考

我们在上面的方法中做循环时,实际上可以看成一个在有序数组中遍历元素然后将其与自身相乘的运算,因此自然可以想到使用二分法来提高性能。
这里需要注意,由于0 <= x <= 231 - 1,我们在用二分法时,为了防止mid * mid溢出,可以将mid * mid <= x的判断转为 mid <= x / mid的判断。
代码如下:

 public int MySqrt(int x){int left = 0, right = x;while (left < right){int mid = left + (right - left) / 2 + 1;if (x / mid >= mid){left = mid;}else{right = mid - 1;}}return left;}

算法之求一个非负整数的平方根相关推荐

  1. 求一个非负数的平方根--sqrt实现

    学过C或任何一种包含标准库语言的我们,求解一个非负数的平方根自然来的容易,随便调用下类似sqrt的函数就一切ok了!比较喜欢探究的同学也会好奇不用sqrt怎么实现求一个数的平方根,或者说sqrt是如何 ...

  2. 求组合数的算法 java,求一个整数的组合数算法(java)

    开始需求: 产生一堆数字. 然后我输入一值,这个值等于这些数中的一个,或是任意多个数的和.但只能是其中一种情况. 比如我输入8.这些数里面,可以直接有8. 也可以是1+2+5 的和,也可以是 1+7 ...

  3. 算法12--topK求一个数组中第k大的数

    求一个数组中第k大的值 解法一: 建立一个k个元素的最大堆,首先将数组中前k个元素放入堆中,此时堆顶元素为第k大的元素,后面继续遍历数组,比较堆顶元素与数组中元素值,当数组中元素小于堆顶元素时,将堆顶 ...

  4. c++调用求平方根函数_如何使用java语言求一个正整数的平方根?(不使用库函数)...

    今天的这篇文章是我在刷算法题的时候遇到的,最简单的方法是直接调用java里面的Sqrt函数,不过有时候题目中会要求我们不能使用库函数,所以在这里我们自己定义Sqrt方法. 最常见的思路有两种,第一种是 ...

  5. 算法 - 快速求一个整数的7倍

    分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net 乘法运算相对比较慢,所以快速的方法就是将这个乘法转换 ...

  6. 算法 快速求一个整数的7倍

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 乘法运算 ...

  7. 写一个求平方根的函数求一个整数的平方根因为函数类型是整形所以平方根的结果是整数,例如5,的平方根是2,而不是2.3...

    # include <stdio.h> int sqrt(int x) {     int target = 1;     while (target * target <= x) ...

  8. c语言编写平方根函数不用库函数,不使用库函数sqrt实现求一个数的平方根

    二分法: double mysqrt(double a) { if(a == ) return ; double precision = 1.0e-7, start = , end = a; if(a ...

  9. C++求一个整数的各位数字总和(附完整源码)

    C++求一个整数的各位数字总和算法 C++求一个整数的各位数字总和算法完整源码(定义,实现,main函数测试) C++求一个整数的各位数字总和算法完整源码(定义,实现,main函数测试) int su ...

最新文章

  1. 2018.9.8-9.8 统计学课程笔记(2)-参数统计
  2. 解决gpg failed to sign the data fatal: failed to write commit object解决方案
  3. python staticmothed classmethod
  4. PCM设备在电网系统中的应用介绍
  5. [深度学习-原理]BP神经网络
  6. Java 并发编程之自定义线程池 ThreadPoolExecutor
  7. dbcc收缩数据库_使用DBCC SHRINKFILE收缩数据库
  8. mysql模糊查询 or_mysql 模糊查询 - yizhichao的个人页面 - OSCHINA - 中文开源技术交流社区...
  9. css伪类选择器,:link、:visited、:focus、:hover、:active、:first-child
  10. 冲量在线荣获STIF2021国际科创节2021年度技术先锋奖
  11. 4000亿农夫山泉的生意经
  12. 教你15道广东糖水甜品
  13. [影评]《大话西游》之:你看,那人好像一只狗耶(外一篇:我们都是那只流泪的猴子。)
  14. 实习转正述职报告PPT模板
  15. 【MapReduce运行报错】Type mismatch inkey form map:excepted org.apache.hadoop.io.Text,recived MR.wordcount.
  16. Pytorch 节省内存、显存的一些技巧
  17. STM32F103C8T6 0.42寸的OLED屏幕IIC例程
  18. word2vec的参数选择及原理简介
  19. GitHub SSH设置与Permission denied问题解决方法
  20. ONES 敏捷项目管理迭代流程图文演示

热门文章

  1. BC20 常用AT指令(MQTT相关)
  2. ASEMI二极管A7参数,A7二极管规格书,A7二极管的封装
  3. 计算机网络管理员工作周记,计算机java开发实习周记20篇
  4. 字节跳动暑期实习生一面面经 大三
  5. stm32f4discovery开发板无法连接ST-Link
  6. ublox TMOD2
  7. 高通msm8937/msm8953签名方法总结
  8. php爬虫程序是什么,php爬虫怎么运行
  9. java合并txt文件_Java程序将两个txt文件合并为第三个txt文件 - Break易站
  10. Java 填充数据到pdf模板打印