小白编程Day01

这篇博客介绍了如何使用C++解决寻找两个整数平方和等于给定非负整数c的问题。提供了两种方法,一是利用sqrt函数,通过单层循环判断是否存在整数b;二是采用双指针法,通过调整左右边界找到符合条件的平方数之和。同时,文章还列举了一些常用的DOS命令和快捷键。
摘要由CSDN通过智能技术生成

平方数之和(c++)

问题描述:给定一个非负整数 c ,你要判断是否存在两个整数 ab,使得 a^2 + b^2 = c

示例 1:

输入:c = 5 输出:true 解释:1 * 1 + 2 * 2 = 5 示例 2:

输入:c = 3 输出:false 示例 3:

输入:c = 4 输出:true 示例 4:

输入:c = 2 输出:true 示例 5:

输入:c = 1 输出:true

提示:

0 <= c <= 2^31 - 1


方法(一)利用sqrt函数

首先值得注意的是提示部分:0 <= c <= 2^31 - 1,所以在定义变量时要定义成long型,避免溢出。

要减少时间复杂度就需要减少循环的用量,这里最好避免使用两层循环,并且用sqrt()函数减少循环次数:

for(long a=0;a*a<=c;a++){
    double b=sqrt(c-a*a);
    if(b==(int)b)//如果b为整数则返回true
        return true;
}

全部代码为:

for (long a = 0; a * a <= c; a++) {
            double b = sqrt(c - a * a);
            if (b == (int)b) {
                return true;
            }
        }
 return false;

方法(二)双指针法

left和right分别表示平方数的左右边界的值,0<=left<=right,right<=sqrt(c)

于是有:

  • left^2+right^2=c,返回true

  • left^2+right^2<c,下界过小需要增大,left++,继续查找

  • left^2+right^2>c,上界过大需要减小,right--,继续查找

如下代码:

long left=0;
long right=(int)sqrt(c);
while(left<=right){
    long sum=left*left+right*right;
    if(sum==c){
         return true;
    }else if(sum<c){
        left++;
    }else{
        right--;
    }
}
return false;

时间复杂度:O(sqrt(c)),最坏的情况下left和right枚举了0到sqrt(c)中所有的数。

新认识的一些常用快捷键

  • Ctrl+A 全选

  • shift+delete 永久删除

  • ALT+F4 关闭窗口

  • window+TAB 切换任务

  • window+R 运行(找CMD命令

  • window+E 打开我电脑

  • Ctrl+shift+ESC 任务管理器

基本的Dos命令

#盘符切换  盘名:
#查看当前目录下的所有文件  dir
#切换命令 cd  cd..返回上一级
#清空屏幕 cls
#退出终端 exit
#查看电脑的ip  ipconfig
#文件操作 
md 创建目录
rd 移除目录
cd> 创建文件
del 删除文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值