当前位置: 首页 > article >正文

633. 平方数之和-LeetCode(C++)

633. 平方数之和

2024.9.11

题目

给定一个非负整数 c ,你要判断是否存在两个整数 ab,使得 a2 + b2 = c

  • 0 <= c <= 2的31次方 - 1
示例

示例 1:

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

示例 2:

输入:c = 3
输出:false
反思

1.不要想当然的认为这道题有一致的解法,虽然也可以用某种方式去做,但很可能有更简单的方式。

2.千万注意题目中给值的边界,如本题0 <= c <= 2的31次方 ,前后两个边界都要考虑,一个是ab均有可能为0,另一个是ab都有可能不能被int存放。

题解1-square

将数组nums的值和它对应的索引存入哈希表作为键值对,利用哈希表查询时间复杂度为O(1),查询nums[i]是否存在。

class Solution {
public:
    bool judgeSquareSum(int c) {
        for (long a = 0; a * a <= c; ++a) {
            long b_squared = c - a * a;
            long b = std::sqrt(b_squared);
            if (b * b == b_squared) { // 如果 b 是整数,那么 b_squared 是完全平方数
                return true;
            }
        }
        return false;
    }
};
题解2-双指针

来自力扣官方题解

不失一般性,可以假设 a≤b。初始时 a=0,b=更号c ,进行如下操作:

class Solution {
public:
    bool judgeSquareSum(int c) {
        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) {
                right--;
            } else {
                left++;
            }
        }
        return false;
    }
};

http://www.kler.cn/a/300582.html

相关文章:

  • Java 接口安全指南
  • hydra破解密码
  • 【PowerQuery专栏】PowerQuery的函数Excel.WorkBook
  • Mybatis面试题
  • 浅谈云计算14 | 云存储技术
  • 重拾Python学习,先从把python删除开始。。。
  • 网络学习-eNSP配置VRRP
  • 【大模型推理】大模型前向推理过程详解
  • PMP–一、二、三模–分类–14.敏捷–技巧–看板面板与燃尽图燃起图
  • VS Code与SVN关联
  • Neo4j图数据库
  • Node.js快速入门
  • 僵尸网络开发了新的攻击技术和基础设施
  • 机器人入门系列:《通过蓝牙模块通讯控制机器人电机转动》
  • Rust在Web开发中的优势是什么?
  • 【lua实战】数组和数组长度
  • Android生成Java AIDL
  • 【网络安全】-文件包含漏洞-pikachu
  • 使用Get包显示Dialog
  • 《HTML 与 CSS—— 响应式设计》
  • C++:priority_queue(优先级队列)的模拟实现
  • 18070 矩阵行交换或列交换
  • 实时音视频之医疗手术示教技术方案探究
  • DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed
  • [001-03-007].第26节:分布式锁迭代1->基于setnx命令实现分布式锁:
  • 08-图8 How Long Does It Take(C)