1. 题目
LeetCode 2485. 找出中枢整数
1.1 题意
在[1,n]范围找出一个整数x,使得1+2+…+x = x + (x + 1) + … +n
1.2 分析
一眼数学,自然数求和: 1 + 2 + . . . + n = ( n ∗ ( n + 1 ) ) / 2 1+2+...+n=(n*(n+1))/2 1+2+...+n=(n∗(n+1))/2
等式左边 = ( x ∗ ( x + 1 ) ) / 2 等式左边=(x*(x+1))/2 等式左边=(x∗(x+1))/2
等式右边 = ( n ∗ ( n + 1 ) ) / 2 − ( ( x − 1 ) ∗ x ) / 2 等式右边=(n*(n+1))/2 - ((x-1)*x)/2 等式右边=(n∗(n+1))/2−((x−1)∗x)/2
化简一下:
x = ( n ∗ ( n + 1 ) ) / 2 x=\sqrt{( n * (n+1) )/2} x=(n∗(n+1))/2
但是结果要求x必须为整数,返回结果时加个判断即可。
范围如下,思考一下应该没有特殊情况
1 <= n <= 1000
1.3 我的解法
class Solution {
public:int pivotInteger(int n) {int right = ( n * (n+1) )/2;int s = sqrt(right);// 判断结果是否恰为整数return (s*s == right) ? s :-1;}
};
1.4 学习题解反思
时间复杂度O(1), 空间复杂度O(1)
这题很明显是一个数学题,如果枚举的话我会觉得很low,但是枚举过程如果用了二分,我会觉得眼前一亮。但是二分需要判断左右,还是需要数学方法。
1.5 bug日记
居然没出bug
2. 后记
仅分享自己的想法,有意见和指点非常感谢