• leetcode-633-Sum of Square Numbers


    题目描述:

    Given a non-negative integer c, your task is to decide whether there're two integers a and b such that a2 + b2 = c.

    Example 1:

    Input: 5
    Output: True
    Explanation: 1 * 1 + 2 * 2 = 5
    

     

    Example 2:

    Input: 3
    Output: False

     

    要完成的函数:

    bool judgeSquareSum(int c) 

     

    说明:

    1、这道题给定一个非负整数c,要求判断c能不能拆成两个整数的平方和。

    2、这道题我们可以用判断法也可以用生成法,但这道题用生成法来做,时间复杂度比较高,还不如用判断法来做。

    我们先找到有可能的整数的上限,比如要判断的数c是27,那么整数上限就是5。

    再定义一个下限,从0开始。

    我们判断上限和下限的平方和,大于还是小于,或者是等于c。

    如果大于c的话,那么上限要减一。

    如果小于c的话,那么下限要加一。

    如果等于,那么返回true。

    最终如果下限超过上限,那么返回false。

     

    用这种寻找-判断的方法来做,是比较快的方法。

    如果同学有更快的方法,欢迎分享在评论区~~

    代码如下:

        bool judgeSquareSum(int c) 
        {
            int uplim=floor(sqrt(c)),lowlim=0,t;//uplim是上限,lowlim是下限,从0开始
            while(lowlim<=uplim)//退出循环条件是下限超过上限
            {
                t=lowlim*lowlim+uplim*uplim;
                if(t<c)
                    lowlim++;
                else if(t>c)
                    uplim--;
                else
                    return true;
            }
            return false;
        }
    

    上述代码实测6ms,beats 87.28% of cpp submissions。

  • 相关阅读:
    String源码分析
    solr IK分词器
    solr安装
    hadoop HA集群搭建(亲测)
    dubbo-admin安装
    关于idea中使用lamb表达式报错:ambda expressions are not supported at this language level
    web项目数据存入mysql数据库中文乱码问题
    dom4j解析xml
    js监听键盘提交表单
    Location replace() 方法
  • 原文地址:https://www.cnblogs.com/chenjx85/p/9184261.html
Copyright © 2020-2023  润新知