力扣挑战:中枢整数的定义与寻找方法

力扣挑战:中枢整数的定义与寻找方法_第1张图片
本篇博客讲解力扣“2485. 找出中枢整数”的解题思路,这是题目链接。

力扣挑战:中枢整数的定义与寻找方法_第2张图片

给定一个正整数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;
}

力扣挑战:中枢整数的定义与寻找方法_第3张图片

总结

分析题目,可以发现本题涉及数学知识,特别是等差数列的求和问题,通常需要用到以下两个公式:

  1. 和=(首项+末项)×项数÷2。
  2. 项数=(末项-首项)÷公差+1。

感谢大家的阅读!

你可能感兴趣的:(力扣刷题,leetcode,算法,职场和发展,数据结构,力扣)