首页 > 其他 > 详细

双指针 leetcode 633

时间:2021-06-09 12:45:08      阅读:23      评论:0      收藏:0      [点我收藏+]

自己的解法为:

 long num = c;
        long l = 0;
        long r = c;
        while (l <= r){
            if ((Math.pow(l, 2) + Math.pow(r, 2)) < num) {l++;continue;}
            if ((Math.pow(l, 2) + Math.pow(r, 2)) > num) {r--;continue;}
            return true;
        }
        return false;

使用了long是因为c太大时r平方会越界什么的, 但是当测试数据是一些很大的数的时候,直接超时了唉。

而整解的双指针法则因该是:

class Solution {
    public boolean judgeSquareSum(int c) {
        int l = 0, r = (int) Math.sqrt(c);
        while (l <= r) {
            int sum = l * l + r * r;
            if (sum < c) {
                l++;
            } else if (sum > c) {
                r--;
            } else { // sum == c
                return true;
            }
        }
        return false;
    }
}

实在太妙了,直接把r定为c的平方根,这样如果原来c就是可以由一个数平方而来的,一次循环就return了大大减少了时间。

而把r直接定位c的平方根,也省了不少的时间,因为r根本就不可能处在大于c的平方根的位置上啊,我之前的解法简直是废的。

双指针 leetcode 633

原文:https://www.cnblogs.com/--here--gold--you--want/p/14865623.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!