Description
Given a positive integer n, find the pivot integer x such that:
- The sum of all elements between
1andxinclusively equals the sum of all elements betweenxandninclusively.
Return the pivot integer x. If no such integer exists, return -1. It is guaranteed that there will be at most one pivot index for the given input.
Example 1:
Input: n = 8 Output: 6 Explanation: 6 is the pivot integer since: 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21.
Example 2:
Input: n = 1 Output: 1 Explanation: 1 is the pivot integer since: 1 = 1.
Example 3:
Input: n = 4 Output: -1 Explanation: It can be proved that no such integer exist.
Constraints:
1 <= n <= 1000
Solutions
Solution 1: Enumeration
We can directly enumerate x in the range of [1,..n], and check whether the following equation holds. If it holds, then x is the pivot integer, and we can directly return x.
(1 + x) × x = (x + n) × (n - x + 1)
The time complexity is O(n), where n is the given positive integer n. The space complexity is O(1).
PythonJavaC++GoTypeScriptRustPHP
class Solution: def pivotInteger(self, n: int) -> int: for x in range(1, n + 1): if (1 + x) * x == (x + n) * (n - x + 1): return x return -1(code-box)
Solution 2: Mathematics
We can transform the above equation to get:
n × (n + 1) = 2 × x2
That is:
x = √n × (n + 1)⁄2
If x is an integer, then x is the pivot integer, otherwise there is no pivot integer.
The time complexity is O(1), and the space complexity is O(1).
PythonJavaC++GoTypeScript
class Solution: def pivotInteger(self, n: int) -> int: y = n * (n + 1) // 2 x = int(sqrt(y)) return x if x * x == y else -1(code-box)
