2485-找出中枢整数
给你一个正整数 n
,找出满足下述条件的 中枢整数 x
:
1
和x
之间的所有元素之和等于x
和n
之间所有元素之和。
返回中枢整数 __x
。如果不存在中枢整数,则返回 -1
。题目保证对于给定的输入,至多存在一个中枢整数。
示例 1:
**输入:** n = 8
**输出:** 6
**解释:** 6 是中枢整数,因为 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21 。
示例 2:
**输入:** n = 1
**输出:** 1
**解释:** 1 是中枢整数,因为 1 = 1 。
示例 3:
**输入:** n = 4
**输出:** -1
**解释:** 可以证明不存在满足题目要求的整数。
提示:
1 <= n <= 1000
方法一:数学
思路与算法
记从正整数 x 加到正整数 y,y \ge x 的和为
sum}(x, y) = x + (x + 1) + \cdots + y
由「等差数列求和公式」得
sum}(x, y) = (x + y) \times (y - x + 1)}{2
则题目等价于给定一个正整数 n,判断是否存在正整数 x 满足
sum}(1, x) = \textit{sum}(x, n)
进一步将上式化简得到
x = \sqrt{n^2 + n}{2}
若 x 不为整数则返回 -1,否则得到「中枢整数」x。
代码
1 | class Solution { |
1 | class Solution { |
1 | class Solution: |
1 | func pivotInteger(n int) int { |
1 | var pivotInteger = function(n) { |
1 | public class Solution { |
1 | int pivotInteger(int n) { |
复杂度分析
- 时间复杂度:O(1),其中计算平方根有专门对应的 CPU 指令,可看作 O(1) 时间复杂度。
- 空间复杂度:O(1),仅使用常量空间。
Comments