2023-06-26 LeetCode每日一题(找出中枢整数)

2023-06-26每日一题

一、题目编号

2485. 找出中枢整数

二、题目链接

点击跳转到题目位置

三、题目描述

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

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

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

提示:

  • 1 <= n <= 1000

四、解题代码

class Solution {
    int sum(int left, int right){
        return (left + right) * (right - left + 1) / 2;
    }
public:
    int pivotInteger(int n) {
        int left = 1;
        int right = n;
        while(left <= right){
            int mid = ((right - left) >> 1) + left;
            if(sum(1, mid) == sum(mid, n)){
                return mid;
            } else if(sum(1, mid) < sum(mid, n)){
                left = mid + 1;
            } else if(sum(1, mid) > sum(mid, n)){
                right = mid - 1;
            }
        }
    return -1;
    }
};

五、解题思路

(1) 首先要了解等差数列的求和公式,已知道x1,x2,x3……xn是等差数列,那么x1+x2+x3+……xn 等于(x1+xn)* n / 2。

(2) 知道了等差数列的求和公式之后,我们就可以很轻松地解决这道题目,采用二分查找的方式,对数字1到数字n进行查到,每次找中间的值,如果1到mid的值等于mid到n的值,返回mid,如果1到mid的值小于mid到n的值,left 等于 mid+1,如果1到mid的值大于mid到n的值,right等于mid-1。

(3) 如果最终依然没有查找到,则返回-1即可。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)