LeetCode2有效的完全平方数
题目:
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。说明:不要使用任何内置的库函数,如 sqrt。
#include<iostream>
using namespace std;
bool judgenum(int num){
long long int low = 1, high = num;
long long int mid =(low+high)/2;
while (low <= high)
{
if(mid*mid ==num)
return true;
else if(mid*mid>num){
high = mid -1;
mid = (low+high)/2;
}
else{
low = mid+1;
mid = (low+high)/2;
}
}
return false;
}
int main(){
int a =1000;
cout<<judgenum(a)<<endl;
return 0;
}
该算法采用了二分法,其最好情况的复杂度为1,最坏情况为数据为为high或者low(即为两端值),假设要查的值为1,可以列式为N*(1/2)^n=1,可知其复杂度为log2n。