解答

双指针

可以看成是在元素为 0~target 的有序数组中查找两个数,使得这两个数的平方和为 target,如果能找到,则返回 true,表示 target 是两个整数的平方和。

本题和 167. Two Sum II - Input array is sorted 类似,只有一个明显区别:一个是和为 target,一个是平方和为 target。本题同样可以使用双指针得到两个数,使其平方和为 target。

本题的关键是右指针的初始化,实现剪枝,从而降低时间复杂度。设右指针为 x,左指针固定为 0,为了使 02 + x2 的值尽可能接近 target,我们可以将 x 取为 sqrt(target)。

因为最多只需要遍历一次 0~sqrt(target),所以时间复杂度为 O(sqrt(target))。又因为只使用了两个额外的变量,因此空间复杂度为 O(1)。

#include <math.h>class Solution {public:bool judgeSquareSum(int c) {long left = 0;long right = (int)sqrt(c);while (left<=right){long sum = left*left+right*right;if(sum==c) return true;else if(sum>c) right--;else left++;}return false;}
};

使用sqrt 函数

在枚举 a 的同时,使用sqrt 函数找出 b。注意:本题 c 的取值范围在[0,2^31−1],因此在计算的过程中可能会发生int 型溢出的情况,需要使用 long 型避免溢出。

class Solution {public:bool judgeSquareSum(int c) {for (long a = 0; a * a <= c; a++) {double b = sqrt(c - a * a);if (b == (int)b) {return true;}}return false;}
};

平方数之和【leetcode 633】相关推荐

  1. C#刷遍Leetcode面试题系列连载(4): No.633 - 平方数之和

    点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 前文传送门: 上篇文章中一道数学问题 - 自除数,今天我们接着分析 LeetC ...

  2. Java 找平方数之和的奇数

    题目描述 读入一个正整数n(n>10),找出10~n内所有可以表示为两个平方数之和的奇数,并输出这些数(按从小到大的顺序)和它们的平方(小的在前.大的在后)表示,如n=30时,程序运行输出: 1 ...

  3. 数论概论读书笔记 25.哪些数可表成两个平方数之和

    哪些数可表成两个平方数之和 对于一个正整数mmm ,如果m" role="presentation">mmm每个素因子都可以表示成两个平方数之和,则素因子分解后,用 ...

  4. LeetCode 633 平方数之和

    题目描述 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 题解 和两数之和那道题目的求解方式类似,需要注意整数的溢出. 代码 class Solutio ...

  5. 1.两数之和-LeetCode

    目录 一.问题描述 二.解题思想 三.解题 1.判断极端情况 2.代码实现 一.问题描述 这里直接采用的LeetCode上面的问题描述. 给定一个整数数组 nums 和一个整数目标值 target,请 ...

  6. 279. 完全平方数 (数学定理 四平方数之和定理)

    LeetCode: 279. 完全平方数 这道题如果知道数学定理之后,相当于告诉你: 任何正整数都可以拆分成不超过4个数的平方和 -> 答案只可能是1,2,3,4 如果一个数最少可以拆成4个数的 ...

  7. Python实现大自然数分解为最多4个平方数之和(1)

    问题描述:任意大自然数,总是能分解为最多4个平方数的和,所谓平方数是指它是一个自然数的平方.例如:72884 = 4^2 + 138^2 + 232^2,33788 = 1^2 + 3^2 + 17^ ...

  8. 两数之和(LeetCode)

    两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是, ...

  9. 15. 三数之和LeetCode

    这算是小总结吧,代码啥的大体上跟大家的一样,只不过我认为官方应该多一个保证不同的操作(反正是通过了,就姑且当我的想法对吧)(明明四数值和官方都进行了保证重复操作,而三个竟然没有都进行,我不理解.) 还 ...

  10. 2022-4-16 Leetcode 633.平方数之和

    第一版,使用双指针,但是造成了溢出. class Solution {public:bool judgeSquareSum(int c) {vector<int> arr(c+1);for ...

最新文章

  1. Unity制作的 安卓和Ios程序如何退出
  2. 【Spring实战】—— 3 使用facotry-method创建单例Bean总结
  3. windows 系统nginx做反向代理实例
  4. java 对象调用_java 对象调用
  5. PHP-cli 日志彩色玩法 echo \033[1;33m Hello World. \033[0m \n;
  6. revit找不到附加模块程序集_TensorFlow基础知识——常用模块(一)
  7. Flex移动性能检查列表
  8. python骗局-如何识破python小课骗局_怎样选择学校呢
  9. ijkplayer之.so文件编译过程
  10. Hbuilder如何创建并运行Vue项目
  11. import torch 找不到模块_15天Python入门-15-模块与包
  12. Java基础视频教程(最适合初学者入门)
  13. 基于R语言GD包的Risk Map制作(批量生成)
  14. MATLAB音乐十二平均律频谱分析与STM32电子琴(含源码)
  15. 反编译:如何脱掉爱加密家的保护壳
  16. ignore在mysql中什么意思_ignore是什么意思
  17. 烤仔TVのCCW丨密码学通识(二)什么是“安全的加密”
  18. 不会想当架构师的健身者不是一个好的程序员
  19. Educoder - Java类和对象之static关键字之求圆环面积和周长
  20. python七段数码管绘制实验报告_Python绘制七段数码管实例代码

热门文章

  1. ffmpeg 命令行多视频轨/音频轨合并,播放
  2. java中怎么复制集合_Java中List集合间的复制
  3. gitlab 多人协同工作
  4. koa利用koa-views通过路由返回html页面
  5. HTML5权威指南读书笔记18(第27章)-window对象,获取窗口信息,获取scree信息,与窗口交互,用户提示,基本信息,history对象,pushstate添加条目,使用定时器
  6. Chapter2 - Sockets and Patterns
  7. 网络安全等级保护拓扑图大全
  8. 音视频会议理论网络参数
  9. 磁盘分区之MSDOS与GPT
  10. 组策略 计算机配置 安全设置,使用组策略配置 Windows 防火墙设置