367力扣有效的完全平方数C++

简介: 367力扣有效的完全平方数C++

给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。

进阶:不要 使用任何内置的库函数,如 sqrt 。


示例 1:


输入:num = 16

输出:true

示例 2:


输入:num = 14

输出:false


提示:


1 <= num <= 2^31 - 1

通过次数140,498提交次数313,365


来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/valid-perfect-square

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

其实也算是二分查找法的一个思想,当使用二分查找法的时候,查找到返回1,没有查找到就返回0。如果对二分查找法不熟的同学可以参考本专栏的二分查找文章https://editor.csdn.net/md/?articleId=123751945


// An highlighted block
#include<iostream>
#include<vector>
using namespace std;
vector<int>a;
bool seachtarger(int tar)
{
    for(int i=0; i<=tar/2;i++)
    {
        a.push_back(i);
    }
    for(vector<int>::iterator it = a.begin();it!=a.end();it++)
    {
        cout << *it<<" ";
    }
    cout << endl;
    int left = 0;
    int right = a.size()-1;
    while(left <= right)//使用的是左右都是闭区间的二分查找法
    {
        int middle = (left+right)/2;
        if(a[middle]*a[middle]>tar)
        {
            right = middle-1;
        }
        else if(a[middle]*a[middle] <tar)
        {
            left = middle+1;
        }
        else
        {
            return true;
        }
    }
    return false;
}
int main()
{
    int target;
    cin >> target;
    bool str = seachtarger(target);
    if(str)
    {
        cout << "true" << endl;
    }
    else
    {
        cout << "false" << endl;
    }
    return 0;
}

上面这个思路是正确的,但是缺点是用到了额外的vector去存储空间,空间复杂度太高。

#include<iostream>
using namespace std;
bool isPerfectSquare(int num)
{
    int left = 0;
    int right = num;
    while(left<=right)
    {
        int middle = (left+right)/2;
        if((long long)middle*middle > num)
        {
            right = middle-1;
        }
        else if((long long)middle*middle<num)
        {
            left = middle+1;
        }
        else
        {
            return true;
        }
    }
    return false;
}
int main()
{
    int n;
    cin >> n;
    bool b;
    b = isPerfectSquare(n);
    if(b)
    {
        cout << "true" << endl;
    }
    else
    {
        cout << "false" << endl;
    }
    return 0;
}
目录
相关文章
|
8天前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
36 6
|
8天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
2天前
|
机器学习/深度学习 canal NoSQL
从C语言到C++_12(string相关OJ题)(leetcode力扣)
从C语言到C++_12(string相关OJ题)(leetcode力扣)
8 0
|
2天前
|
编译器 测试技术 C语言
从C语言到C++_11(string类的常用函数)力扣58和415(下)
从C语言到C++_11(string类的常用函数)力扣58和415
4 0
|
2天前
|
存储 编译器 C语言
从C语言到C++_11(string类的常用函数)力扣58和415(中)
从C语言到C++_11(string类的常用函数)力扣58和415
6 0
|
2天前
|
存储 C语言 C++
从C语言到C++_11(string类的常用函数)力扣58和415(上)
从C语言到C++_11(string类的常用函数)力扣58和415
7 0
|
8天前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
8天前
|
存储 Java C++
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
15 1
|
8天前
|
Go C++
【力扣】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
【2月更文挑战第17天】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
32 8
|
8天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
12 0