Problem
Given a non-negative integer c
, your task is to decide whether there’re two integers a
and b
such that
Example 1:
1 | Input: 5 |
Example 2:
1 | Input: 3 |
Analysis
这是一题关于数学的算法题,要求的是一个数是否能够由两个数平方的和组成。难度本身不大,我们只需要从0 到 a
和b
,但是想要找到快速的方法却很具技巧性。这里不讨论使用两个循环穷举的方法,复杂度为
我第一个想法是使用减法的思想,即i
,那么对于每个true
。这个算法本身复杂度也不高,是
从第一个想法中,可以发现,我们的遍历方向是任意的,即从0到
Solution
我们首先求出a
,右游标是b
:
- 若
,returntrue
; - 若
,a++; - 否则,b–;
注意:a
从0开始,要包含c本身就是平方数的情况!
Code
1 | class Solution { |
运行时间:约0ms,超过97.06%的CPP代码。
Summary
这虽然是一题简单的关于平方数的数学题,但是如果自己思考的话,会发现不同算法的效率相差是很大的。在面对线性数组问题,通常我们降低算法复杂度的方法有:(1)二分;(2)首尾一起移动。这道题的解析就到这里了,谢谢你的支持!
v1.5.2