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;
}
目录
相关文章
|
3月前
|
Python
【Leetcode刷题Python】279. 完全平方数
LeetCode 279题 "完全平方数" 的Python解决方案,使用动态规划来找到和为给定整数n的完全平方数的最少数量。
31 0
|
3月前
|
Python
【Leetcode刷题Python】367. 有效的完全平方数
本文提供了两种判断一个正整数是否为完全平方数的Python实现方法:一种是利用数学公式逐个减去奇数的方法,另一种是使用二分查找优化的暴力求解方法。
62 0
【超直白】leetcode 279 完全平方数
【超直白】leetcode 279 完全平方数
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
6月前
|
算法 C语言 容器
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(下)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
64 7
|
6月前
|
存储 算法 C语言
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
59 5
|
6月前
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(下)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
45 1
|
6月前
|
存储 C语言 容器
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(中)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
47 1
|
6月前
|
存储 自然语言处理 C语言
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别(上)
从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别
59 1