leetcode-633.平方数之和

双指针法


题目详情

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


示例1:

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

示例2:

输入:c = 3
输出:false

我的代码:

class Solution 
{
public:
    bool judgeSquareSum(int c) 
    {
       long left=0,right=int(sqrt(c));
       while(left<=right)
       {    long sum=left*left+right*right;
           if (sum==c)
           return true;
           else if (sum<c)
           ++left;
           else
           --right;

       }
        return false;
    }
};

涉及知识点:

1.双指针算法

双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。
若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。
若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。

思路:

第一想法是遍历,为了提高效率,可以利用双指针法,将一个数的算术平方根和0作为两端,即可在此区间内根据sum大小来左右移动搜索题目需要的那两个数.
如果两个指针指向元素的和等于给定值,那么它们就是我们要的结果。如果两个指针指向元素的和小于给定值,我们把左边的指针右移一位,使得当前的和增加一点。如果两个指针指向元素的和大于给定值,我们把右边的指针左移一位,使得当前的和减少一点。

posted @ 2022-03-26 15:17  ggaoda  阅读(0)  评论(0编辑  收藏  举报  来源