【每日一算法】使用二分法解决x 的平方根问题
每日一算法-x 的平方根
题目
实现 int sqrt(int x)
函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
解析
一开始,最笨的做法,从0到n遍历,代码:
class Solution {
public:
int mySqrt(int x) {
int res = 0;
for(int i=1;i<=x;i++){
if((x / i >= i) && (x / (i+1)< (i+1))){
res = i;
break;
}
}
return res;
}
};
不好意思,让各位见笑了!
之后我尝试了用二分搜索法和牛顿迭代法。接下来我用二分搜索法给大家讲一下如何做这道题。
代码如下:
class Solution {
public:
int mySqrt(int x) {
if(x<0) return INT_MIN;
long long low=0;
long long up=x;
while(low <= up)
{
long long mid=(low+up)/2; // 取中间值mid,在此处如果改为位运算居然使程序变慢了!
long long square=mid*mid;
if(x==square) return mid; // 目标值等于mid处平方,提前退出循环出口
else if(x>square) low=mid+1; // 目标值大于mid处平方,在开区间(mid, up]中找,下界low的值调整为mid-1
else up=mid-1; // 目标值小于mid处平方,在开区间[low, mid)中找,上界up的值调整为mid+1
}
return up;
}
};
结果好了很多
推荐阅读
今日问题
一句话描述一下牛顿迭代法的原理
(不会的可以去百度)
打卡格式:打卡第n天,答:...
为什么打卡?戳下面就知道了!
猛
戳
这
儿
21/天/养/一/个/好/习/惯
【每日一算法】使用二分法解决x 的平方根问题相关推荐
- 【每日一算法】对称二叉树
每日一算法-对称二叉树 题目 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是 ...
- 【每日一算法】杨辉三角 II
每日一算法-杨辉三角 II 题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] ...
- 【每日一算法】合并两个有序数组
每日一算法-搜索插入位置 题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 ...
- 【每日一算法】移除元素
微信改版,加星标不迷路! 每日一算法-移除元素 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素, ...
- 【每日一算法】删列造序
微信改版,加星标不迷路! 每日一算法-删列造序 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等. 选取一个删除索引 ...
- 【每日一算法】求众数
微信改版,加星标不迷路! 每日一算法-求众数 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你 ...
- 【每日一算法】唯一摩尔斯密码词
微信改版,加星标不迷路! 每日一算法-唯一摩尔斯密码词 作者:阿广 阅读目录 1 题目 2 解析 1 题目 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如 ...
- 【每日一算法】最后一个单词的长度
微信改版,加星标不迷路! 每日一算法-最后一个单词的长度 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最 ...
- 【每日一算法】行星碰撞
微信改版,加星标不迷路! 每日一算法-行星碰撞 给定一个整数数组 asteroids,表示在同一行的行星. 对于数组中的每一个元素,其绝对值表示行星的大小,正负表示行星的移动方向(正表示向右移动,负表 ...
最新文章
- 使用 Inception-v3,实现图像识别(Python、C++)
- PHP函数printf()、sprintf()的用法
- iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view...
- UNIX环境高级编程--第七章
- 惠普服务器显示灯闪红灯,惠普打印机指示灯闪烁什么意思? 惠普2130打印机故障灯大全图解...
- H3C 单区域OSPF配置示例二
- 大数据没用?!张小龙:我们很少看统计数据!
- 设计原则在设计模式的应用
- linux挂载硬盘_Linux服务器如何识别移动硬盘?
- 测试鼠标是否双击_鼠标连接电脑没反应
- mysql之前缀索引
- 今天终于找到了一款windows下的Zcash钱包(ZEC钱包),推荐给大家
- 可视化大作业复习笔记
- R语言入门——平均相对误差的计算
- 泛函分析在计算机科学中的应用,泛函分析 - 重庆师范大学数学科学学院.doc
- 候客点选在哪大数据说了算 申城推广简易出租车候客站点
- 相对路径与绝对路径区别
- 十进制与R进制之间的转换
- C++11 ThreadPool总结
- mysql 5.7的my.ini的位置在隐藏文件夹“ProgramData”下面