LeetCode 633.平方数之和

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

示例 1:

输入:c = 5

输出:true

解释:1 * 1 + 2 * 2 = 5

示例 2:

输入:c = 3

输出:false

提示:

0 <= c <= 231^{31}31 - 1

相向双指针,右指针从c\sqrt{c}c 开始,因为大于该值的数的平方已经大于c了,更别说还要加上另一个数:

cpp 复制代码
class Solution {
public:
    bool judgeSquareSum(int c) {
        int left = 0;
        int right = sqrt(c);

        while (left <= right) {
            if (left * left < c - right * right) {
                ++left;
            } else if (left * left > c - right * right) {
                --right;
            } else {
                return true;
            }
        }

        return false;
    }
};

此算法时间复杂度为O(c\sqrt{c}c ),空间复杂度为O(1)。

相关推荐
宴之敖者、1 小时前
数组——初识数据结构
c语言·开发语言·数据结构·算法
圣保罗的大教堂3 小时前
leetcode 1695. 删除子数组的最大得分 中等
leetcode
不想学习\??!3 小时前
c练习-c基础
数据结构·算法
伊织code3 小时前
OpenCV 官翻8 - 其他算法
人工智能·opencv·算法·拼接·光流·成像
এ᭄画画的北北5 小时前
力扣-198.打家劫舍
算法·leetcode
橙小花5 小时前
C语言:break、continue、猜拳游戏
c语言·算法·游戏
Mr_Swilder5 小时前
一种可扩展且可用于生产环境的天空与大气渲染技术
前端·javascript·算法
Himon6 小时前
LLM参数有效性学习综述
人工智能·算法·nlp
এ᭄画画的北北6 小时前
力扣-300.最长递增子序列
算法·leetcode
晨曦学习日记6 小时前
Leetcode题解:209长度最小的子数组,掌握滑动窗口从此开始!!!
数据结构·算法·leetcode