栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode-刷题笔记之-633. 平方数之和

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode-刷题笔记之-633. 平方数之和

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

示例1:

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

示例2:

 输入:c = 3

 输出:false

示例3:

 输入:c = 4

 输出:true

示例4:

 输入:c = 2

 输出:true

示例5:

 输入:c = 1

 输出:true

 解题思路:

        这题我的思路是采取的是双指针。依题可知判断是否存在两个整数a和b使得,我们可以得到a与b的范围一定在[0,]之间,故使用指针i指向区间最左端,指针j指向指针最右端。初始标志flag=0表示未找到符合要求的两个数。

算法步骤:判断是否满足c" src="https://latex.codecogs.com/gif.latex?i%5E2+j%5E2%3Ec" />,若是,则向左移动尾指针j,若i^2+j^2

import java.util.Scanner;
import java.lang.Math;
//给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。
public class Leetcode_633 {
    public boolean judgeSquareSum(int c) {
        int s_c = (int)Math.sqrt(c);
        int i=0,j=s_c;
        int flag = 0;
        if (c==1 || c==0)
            return true;
        while(i<=j){
            if (Math.pow(i,2)+Math.pow(j,2) < c)
                i++;
            else if (Math.pow(i,2)+Math.pow(j,2) > c)
                j--;
            else {
                flag=1;
                break;
            }
        }
        if (flag==1)
            return true;
        return false;
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int c = sc.nextInt();
        Leetcode_633 l = new Leetcode_633();
        long start =  System.currentTimeMillis();
        boolean flag = l.judgeSquareSum(c);
        long end =  System.currentTimeMillis();
        System.out.print(flag);
        System.out.print(end-start);

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301313.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号