每日算法题-leetcode第633题-平方数之和

855 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

leetcode今日题目第633题-平方数之和

一、题目描述

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

示例 1:

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

示例 2:

输入:c = 3
输出:false

二、思路分析

双指针法

a2 + b2 = c,可知a、b的取值范围为[0, sqrt(c)]; 因为b2 = c - a2,可知随着a的增大,b递减,二者变化方向相反,因此考虑双指针法;

左指针起始位置a = 0,右指针起始位置b = Math.floor(Math.sqrt(c));

计算a2 + b2的值;

大于c,右指针左移;

小于c,左指针右移;

等于c返回true

没有上述情况返回,查找失败,false。

三、JavaScript 代码

var judgeSquareSum = function(c) {
    let a = 0, b = Math.floor(Math.sqrt(c));
    while(a <= b) {
        if ((a*a + b*b) === c) return true;
        if((a*a + b*b) < c) a++;
        if((a*a + b*b) > c) b--;
    }
    return false;
};

四、总结

本题目就是一个很典型的对双指针运用的例子,采用两端向中间靠拢,按照满足的条件来决定指针左移还是右移,依次查找,知道满足条件或者所有条件都不满足,知道查找失败。

五、最后

我是朽木白,一个热爱分享的程序猿。如果觉得本文还不错,记得点赞+关注❤️