LeetCode 633 平方数之和(多解题)

LeetCode 633 平方数之和

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

逆向双指针逼近
对于给定的整数target,可能存在的两个整数a、b均不可能大于floor(sqrt(c)), 因此在[0, floor(sqrt(c))]范围内寻找

执行用时:8 ms, 在所有 Java 提交中击败了11.74%的用户
内存消耗:36.5 MB, 在所有 Java 提交中击败了40.08%的用户

class Solution {
    public boolean judgeSquareSum(int c) {
        
        /*先对C进行开方并向下取整*/
        int n = (int)(Math.floor(Math.sqrt(c*1.0)));
        int a = 0, b = n;
        /*逆向双指针逼近*/
        while(a <= b) {
            double currSum = Math.pow(a,2) + Math.pow(b,2);
            if(Math.abs(currSum-c)<1e-6) {
                return true;
            }
            else if(currSum > c) {
                b--;
            }
            else {
                a++;
            }
        }

        return false;
    }
}
posted @ 2020-08-25 00:11  CodeSPA  阅读(152)  评论(0编辑  收藏  举报