基于等差数列求和公式,依次使用 1 到 n 中的每个数字,把它当作中枢数去计算两边的数列的和。如果两边数列和相等,那么当前这个数字就是中枢数。如果直到循环结束,都没有发现一个正确的中枢数,那么返回 -1
等差数列求和公式
- Sn:数列的和
- n:数列的项数
- a:数列的第一项
- an:数列的最后一项
class Solution {
public int pivotInteger(int n) {
// 从 n 开始倒序循环,应该可以更早结束循环
for (int i = 1; i <= n; ++i) {
if (sum(1, i) == sum(i, n)) {
return i;
}
}
return -1;
}
private int sum(int start, int end) {
return (start + end) * (end - start + 1) / 2;
}
}