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
提示:
0 <= c <= 231 - 1
解题思路
维护l,r两个元素值,l=0,r=sqrt©,满足了l<=r条件,当ll+rr小于目标值,就需要移动左指针。当ll+rr大于目标值,说明元素太大了,就需要移动右指针。
原理
相当于每次固定一个右边界,然后收缩左边界。
为什么每次左指针不从1开始遍历,而是从上次的左指针开始?
因为每次更换右边界的条件是ll+rr>c, 这证明当前两个左指针的平方和太大了,所以需要换一个更小的右指针。那左指针前面的值为什么不行呢?
例如l-1,因为l是由l-1转移来的,而l-1转移到l的条件是l*l+r-r<c(注意:这里的r是缩减边界前的r)),在r更大的情况下,l-1产生的平方和都是偏小了,而现在又边界还收缩了,产生的平方和就更小了,所以根本不需要从1重新遍历一次,直接从左指针开始就可以了。
代码
func judgeSquareSum(c int) bool {l,r:=0,int(math.Sqrt(float64(c)))for l<=r {cur:=l*l+r*rif cur==c{return true}else if cur<c{l++}else {r--}}return false}
复杂度分析
时间复杂度:O(sqrt©)。最坏情况下 l 和 r 一共枚举了 0 到 sqrt©
里的所有整数。
空间复杂度:O(1)。
leetcode 633. 平方数之和(双指针)相关推荐
- LeetCode 633 平方数之和
题目描述 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c . 题解 和两数之和那道题目的求解方式类似,需要注意整数的溢出. 代码 class Solutio ...
- 2022-4-16 Leetcode 633.平方数之和
第一版,使用双指针,但是造成了溢出. class Solution {public:bool judgeSquareSum(int c) {vector<int> arr(c+1);for ...
- C#刷遍Leetcode面试题系列连载(4): No.633 - 平方数之和
点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 前文传送门: 上篇文章中一道数学问题 - 自除数,今天我们接着分析 LeetC ...
- leetcode题解15-三数之和(双指针经典)
问题描述 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. 注意:答案中不可以包 ...
- 167. 两数之和 II - 输入有序数组633. 平方数之和
167. 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数.如果设这两个数分别是 numbers[i ...
- Leetcode 15.三数之和 双指针 or 暴力哈希
题目链接:传送门 题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. 暴力+ ...
- 633.平方数之和(Sum of Square Numbers)
题目描述 给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c. 示例1: 输入: 5 输出: True 解释: 1 * 1 + 2 * 2 = 5 示例2: 输 ...
- [双指针|模拟] leetcode 15 三数之和
[双指针|模拟] leetcode 15 三数之和 1.题目 题目链接 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ? ...
- LeetCode 15三数之和16最接近的三数之和
三数之和(双指针) 题意: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...
最新文章
- 【Live555】live555源码详解(九):ServerMediaSession、ServerMediaSubsession、live555MediaServer
- [Ms SQL] 基本創建、修改與刪除
- 为什么没有MMU的处理器无法安装操作系统?
- GIT项目管理工具(part1)--简介及概念
- 电脑功耗测试软件_电脑“烤机”怎么测?用这几款软件就对了
- php shell ddos,用shell解决ddos攻击实例
- 两步解决:PDF旋转后怎么保存?
- BTA | CSDN蒋涛:区块链时代最大赢家,将属于技术、经济、组织的三合一高手
- 【预测模型】人口结构可持续发展模型构建
- 网页游戏外挂的设计与编写:QQ摩天大楼【二】(登陆准备-信息处理方式)
- 游戏服务端(MMORPG)的基础算法一、AOI
- 【高效获取jpeg图片的尺寸】
- 关于使用LocationManager时遇到的问题
- 支持中文的deepdive:斯坦福大学的开源知识抽取工具(三元组抽取)
- 节点偏差Junction Deviation
- 分析谷歌收购摩托罗拉无线对移动产业带来的影响
- Sharding-JDBC简单使用
- 性能监控-软中断出现瓶颈的查看方式
- 分享给爱看电影的朋友们一款应用,磁力网盘app~~
- Spring Boot Admin (Spring Clould Admin) 官方文档重点内容中文翻译