「每日LeetCode」2022年12月22日

本文最后更新于:2023年3月19日 晚上

2485.找出中枢整数

2485.找出中枢整数

Category Difficulty Likes Dislikes
algorithms Easy (82.13%) 6 -

Tags
Companies
给你一个正整数 n ,找出满足下述条件的** 中枢整数** x :

  • 1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。

返回中枢整数_ _x 。如果不存在中枢整数,则返回 -1 。题目保证对于给定的输入,至多存在一个中枢整数。

示例 1:
输入:n = 8 输出:6 解释:6 是中枢整数,因为 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21 。
示例 2:
输入:n = 1 输出:1 解释:1 是中枢整数,因为 1 = 1 。
示例 3:
输入:n = 4 输出:-1 解释:可以证明不存在满足题目要求的整数。

提示:

  • 1 <= n <= 1000

Discussion | Solution

思路

在代码中,定义了一个函数 pivotInteger,接收一个参数 n。函数内部初始化了两个变量 sum1 和 sum2,和两个数组 arr1 和 arr2。
接下来在一个循环中,用 i 从 1 遍历到 n。每次循环,向 sum1 中加上 i,向 sum2 中加上 n-i+1。将 sum1 的值赋值给 arr1 的第 i-1 个元素,将 sum2 的值赋值给 arr2 的第 n-i 个元素。
接下来,再进行一次循环,遍历 arr1 数组的所有元素。每次循环,将 arr1 的第 i 个元素赋值给 num1,将 arr2 的第 i 个元素赋值给 num2。如果 num1 等于 num2,就返回 i+1。
如果在循环结束后,没有返回值,则返回 -1。
综上所述,这段代码的作用是:从 1 遍历到 n,找出第一个使得前缀和等于后缀和的数的位置,并返回这个位置。如果找不到,则返回 -1。前缀和指的是 1 到当前数的和,后缀和指的是当前数到 n 的和。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
* @lc app=leetcode.cn id=2485 lang=javascript
*
* [2485] 找出中枢整数
*/

// @lc code=start
/**
* @param {number} n
* @return {number}
*/
var pivotInteger = function (n) {
let sum1 = 0,
sum2 = 0;
const arr1 = [],
arr2 = [];
for (let i = 1; i <= n; i++) {
sum1 += i;
sum2 += n - i + 1;
arr1[i - 1] = sum1;
arr2[n - i] = sum2;
}
for (let i = 0; i < arr1.length; i++) {
const num1 = arr1[i],
num2 = arr2[i];
if (num1 === num2) return i + 1;
}
return -1;
};
// @lc code=end