本篇博客讲解力扣“2485. 找出中枢整数”的解题思路,这是题目链接。
给定一个正整数n,如果它存在一个中枢整数x,那么满足以下等式:
1+2+3+…+x = x+(x+1)+(x+2)+…+n
利用等差数列求和公式:(首项+末项)×项数÷2,以及项数=(末项-首项)÷公差+1,可以得到:
(1+x)×x÷2 = (x+n)×(n-x+1)÷2
化简后,将含有x的项移到等式左边,含n的项移到等式右边,得到:
2×x2 = n2+n
因此,可以求出x=sqrt((n2+n)÷2),其中sqrt表示开平方根。
所以,本题的解题思路是:计算sqrt((n2+n)÷2),如果结果是一个整数,那么就是有效的中枢整数。如果结果不是一个整数,那么就不存在中枢整数,返回-1。
判断结果是否是整数的方法是:使用强制类型转换,将结果转换为int类型,如果转换后的结果和原来相同,那么说明结果是一个整数。
int pivotInteger(int n){
// 1+2+3+...+x = x+(x+1)+(x+2)+...+n
// (1+x)*x/2 = (x+n)*(n-x+1)/2
// 2x^2 = n^2+n
// x = sqrt((n^2+n)/2)
double x = sqrt((n*n+n)/2);
// 若x是整数,则结果为x
return (int)x == x ? x : -1;
}
总结
分析题目,可以发现本题涉及数学知识,特别是等差数列的求和问题,通常需要用到以下两个公式:
- 和=(首项+末项)×项数÷2。
- 项数=(末项-首项)÷公差+1。
感谢大家的阅读!