leetcode_69题——Sqrt(x)(二分查找,还有个溢出问题的研究)

Sqrt(x)

Total Accepted: 52136 Total Submissions: 225527My Submissions

Question Solution

Implement int sqrt(int x).

Compute and return the square root of x.

Hide Tags

Math Binary Search

Have you met this question in a real interview?

Yes

No

Discuss

这道题采用二分查找的方法来做,主要是要注意其中数的溢出问题,使用unsigned int,而4个字节,所以是最大值为2^32-1=4294967295,所以再选取中间的值的值时

不能大于65535(因为65535的平方已经是最大值了,再大了计算不了,为溢出)

#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;

int mySqrt(int x){

	if(x==0||x==1)
		return x;
	unsigned int a=0;
	unsigned int b=x;
	unsigned int c;
	while(1)
	{
		if(a==b)
			return a-1;

		c=(a+b)/2;
		if(c>65535)
			c=65535;

		if(c*c==x)
			return c;
		else if(c*c<x)
		{
			a=c+1;
		}
		else
		{
			b=c;
		}
	}
}
int main()
{
	int x=2147395599;
	cout<<mySqrt(x)<<endl;

}

  

时间: 2024-10-08 09:21:36

leetcode_69题——Sqrt(x)(二分查找,还有个溢出问题的研究)的相关文章

leetcode 69题 思考关于二分查找的模版

leetcode 69, Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a non-negative integer. Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is retu

找数字(递归,二分查找)

题目:在一从大到小排序的序列中用递归找一个数在不在这序列,在输出yes,不在输出no 这题用了二分查找的递归实现 思路: 把数组和变量都变成全局变量方便递归函数修改 然后如果不可能就跳出循环 如果可能但现在没找到就缩小范围进入下一个递归过程 如果找到了就输出 代码: #include<bits/stdc++.h> using namespace std; int a[1000]; int n,key; int finder(int l,int r)//左和右 { if(l>r) { co

『嗨威说』算法设计与分析 - 算法第二章上机实践报告(二分查找 / 改写二分搜索算法 / 两个有序序列的中位数)

本文索引目录: 一.PTA实验报告题1 : 二分查找 1.1 实践题目 1.2 问题描述 1.3 算法描述 1.4 算法时间及空间复杂度分析 二.PTA实验报告题2 : 改写二分搜索算法 2.1 实践题目 2.2 问题描述 2.3 算法描述 2.4 算法时间及空间复杂度分析 三.PTA实验报告题3 : 两个有序序列的中位数 3.1 实践题目 3.2 问题描述 3.3 算法描述 3.4 算法时间及空间复杂度分析 四.实验心得体会(实践收获及疑惑) 一.PTA实验报告题1 : 二分查找 1.1 实践

二分查找的相关算法题

最近笔试经常遇到二分查找的相关算法题 1)旋转数组中的最小数字 2)在旋转数组中查找某个数 2)排序数组中某个数的出现次数 下面我来一一总结 1 旋转数组的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 实现数组的旋转见左旋转字符串. 和二分查找法一样,用两个指针分别指向数组的第一个元素和最后一个元素. 我们注意到旋转

leetcode 刷题之路 70 earch Insert Position 二分查找插入位置

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. Here are few examples. [1,3,5,6], 5 → 2 [1,3,5,6], 2

集训第四周(高效算法设计)N题 (二分查找优化题)

原题:poj3061 题意:给你一个数s,再给出一个数组,要求你从中选出m个连续的数,m越小越好,且这m个数之和不小于s 这是一个二分查找优化题,那么区间是什么呢?当然是从1到数组长度了.比如数组长度为10,你先找5,去枚举每一个区间为5的连续的数,发现存在这样的数,那么就可以继续往左找,反之则往右找,直到左右区间重合,即为正确答案,(有可能是右区间小于左区间,所以每次都应该求区间中点值) #include"iostream" #include"set" #incl

leetcode 二分查找 Sqrt(x)

Sqrt(x) Total Accepted: 26074 Total Submissions: 116517My Submissions Implement int sqrt(int x). Compute and return the square root of x. 题意:实现求方根 sqrt(x) 思路:二分法 对于一个数,它的方根不可能大于 x/2 + 1 问题转变为在[0,x/2 + 1]中找到一个数 v 使得 v * v == x 既然是在有序区间里找数,那么就可以用二分查找 注

记录一次面试中二分查找的算法题

总结一下本次二面的一道算法题,当时代码写到一半,发现自己逻辑好像有问题,然后就没办法往下写了,导致最终没做出来,面试出来百度了一下,瞬间感觉自己......... 废话不多说,直接看题 需求:写一个二分查找,用迭代的方式去实现,并设计该算法的测试案例 面试完后看见这个题目真是简单,直接代码写起 public class Algorithm{ public int binarySearch(int[] nums,int target){ int left = 0; int right = nums

算法题16 二分查找及相关题目

二分查找思想就是取中间的数缩小查找范围,对应不同的题目变形,在取到中间数mid确定下一个查找范围时也有不同,左边界有的low=mid+1,也可能low=mid,右边界有的high=mid-1,也有可能high=mid. 对于一个排序数组来说二分查找的时间复杂度是O(logn) 1. 二分查找法 1 int BinarySearch(int arr[],int len,int target) 2 { 3 if (arr==NULL||len<=0) 4 throw std::exception(&qu