返回介绍

solution / 2400-2499 / 2485.Find the Pivot Integer / README

发布于 2024-06-17 01:03:05 字数 4366 浏览 0 评论 0 收藏 0

2485. 找出中枢整数

English Version

题目描述

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

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

返回中枢整数_ _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

解法

方法一:枚举

我们可以直接在 $[1,..n]$ 的范围内枚举 $x$,判断以下等式是否成立。若成立,则 $x$ 为中枢整数,直接返回 $x$ 即可。

$$ (1 + x) \times x = (x + n) \times (n - x + 1) $$

时间复杂度 $O(n)$,其中 $n$ 为给定的正整数 $n$。空间复杂度 $O(1)$。

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
class Solution {
  public int pivotInteger(int n) {
    for (int x = 1; x <= n; ++x) {
      if ((1 + x) * x == (x + n) * (n - x + 1)) {
        return x;
      }
    }
    return -1;
  }
}
class Solution {
public:
  int pivotInteger(int n) {
    for (int x = 1; x <= n; ++x) {
      if ((1 + x) * x == (x + n) * (n - x + 1)) {
        return x;
      }
    }
    return -1;
  }
};
func pivotInteger(n int) int {
  for x := 1; x <= n; x++ {
    if (1+x)*x == (x+n)*(n-x+1) {
      return x
    }
  }
  return -1
}
function pivotInteger(n: number): number {
  for (let x = 1; x <= n; ++x) {
    if ((1 + x) * x === (x + n) * (n - x + 1)) {
      return x;
    }
  }
  return -1;
}
impl Solution {
  pub fn pivot_integer(n: i32) -> i32 {
    let y = (n * (n + 1)) / 2;
    let x = (y as f64).sqrt() as i32;

    if x * x == y {
      return x;
    }

    -1
  }
}
class Solution {
  /**
   * @param Integer $n
   * @return Integer
   */
  function pivotInteger($n) {
    $sum = ($n * ($n + 1)) / 2;
    $pre = 0;
    for ($i = 1; $i <= $n; $i++) {
      if ($pre + $i === $sum - $pre) {
        return $i;
      }
      $pre += $i;
    }
    return -1;
  }
}

方法二:数学

我们可以将上述等式进行变形,得到:

$$ n \times (n + 1) = 2 \times x^2 $$

即:

$$ x = \sqrt{\frac{n \times (n + 1)}{2}} $$

如果 $x$ 为整数,则 $x$ 为中枢整数,否则不存在中枢整数。

时间复杂度 $O(1)$,空间复杂度 $O(1)$。

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
class Solution {
  public int pivotInteger(int n) {
    int y = n * (n + 1) / 2;
    int x = (int) Math.sqrt(y);
    return x * x == y ? x : -1;
  }
}
class Solution {
public:
  int pivotInteger(int n) {
    int y = n * (n + 1) / 2;
    int x = sqrt(y);
    return x * x == y ? x : -1;
  }
};
func pivotInteger(n int) int {
  y := n * (n + 1) / 2
  x := int(math.Sqrt(float64(y)))
  if x*x == y {
    return x
  }
  return -1
}
function pivotInteger(n: number): number {
  const y = Math.floor((n * (n + 1)) / 2);
  const x = Math.floor(Math.sqrt(y));
  return x * x === y ? x : -1;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文