二刷633. Sum of Square Numbers

这道题一开始用O(N2)的方法,结果发现有一个Integer.MAX_VALUE的input, 过不了;一般来说10^6- 10^7之后的要做到O(N)


image.png

直接用two pointers两头走,注意right pointer只需要到Math.sqrt(n), 不需要到n. 这样只需要O(N)

class Solution {
    public boolean judgeSquareSum(int c) {
        //a,b should be non-negative
        int i = 0;
        int j = (int) Math.sqrt(c);
        while (i <= j){
            int squareSum = i*i + j*j;
            if (squareSum == c){
                return true;
            } else if (squareSum > c){
                j--;
            } else {
                i++;
            }
        }
        return false;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容