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]是否存在。

c++ 复制代码
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 ,进行如下操作:

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;
    }
};
相关推荐
Cinema KI5 分钟前
走进C++11(上):核心语法变化与变成范式转变
c++
棱镜Coding8 分钟前
LeetCode-Hot100 30.两两交换链表中的节点
算法·leetcode·链表
虎头金猫10 分钟前
内网导航站 “出圈”!用 cpolar 解锁 Dashy 远程访问新玩法
java·c++·python·程序人生·职场和发展·php·程序员创富
2301_7903009614 分钟前
C++与量子计算模拟
开发语言·c++·算法
汽车仪器仪表相关领域23 分钟前
经典指针+瞬态追踪:MTX-A模拟废气温度(EGT)计 改装/赛车/柴油车排气温度监测实战全解
大数据·功能测试·算法·机器学习·可用性测试
如果你想拥有什么先让自己配得上拥有30 分钟前
斐波那契黄金分割自然界演化以及金融上的共振?
算法·金融
灰色小旋风33 分钟前
力扣第1题:两数之和(C++)
c++·算法
民乐团扒谱机35 分钟前
机器学习 第二弹 和AI斗智斗勇 机器学习核心知识点全解析(GBDT/XGBoost/LightGBM/随机森林+调参方法)
算法·决策树·机器学习
智驱力人工智能38 分钟前
实线变道检测 高架道路安全治理的工程化实践 隧道压实线监测方案 城市快速路压实线实时预警 压实线与车牌识别联动方案
人工智能·opencv·算法·安全·yolo·边缘计算
We་ct42 分钟前
LeetCode 3. 无重复字符的最长子串:滑动窗口最优解演进与解析
前端·算法·leetcode·typescript