题目描述:
给你一个正整数 n ,找出满足下述条件的 中枢整数 x :
1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。
返回中枢整数 x 。如果不存在中枢整数,则返回 -1 。题目保证对于给定的输入,至多存在一个中枢整数。
题目链接:LeetCode-2485-找出中枢整数
解题思路:
方法一:双指针:一前一后走,当sumLeft == sumRight并且i==j时退出while循环
方法二:根据数学公式推导
方法一代码实现:
java
class Solution {
public int pivotInteger(int n) {
// 双指针:一前一后走,当sumLeft == sumRight并且i==j时退出while循环
int i = 1, j = n;
int sumLeft = 1, sumRight = n;
int sum=n*(n+1)/2;
while (i <= j) {
if (sumLeft == sumRight) {
if (i == j) break;
i++;
sumLeft += i;
} else if (sumLeft < sumRight){
i++;
sumLeft += i;
}else {
j--;
sumRight += j;
}
}
return i == j ? i : -1;
}
}
题解可以看官方给的解题思路:传送门
方法二代码实现:
java
class Solution {
public int pivotInteger(int n) {
int sum=n*(n+1)/2;
int tmp=(int) Math.sqrt(sum);
return tmp*tmp==sum ? tmp:-1;
}
}