算法

2485. 找出中枢整数

2023-06-25  本文已影响0人  红树_

LC每日一题,参考2485. 找出中枢整数

题目

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

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

输入:n = 8
输出:6
解释:6 是中枢整数,因为 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21 。
输入:n = 1
输出:1
解释:1 是中枢整数,因为 1 = 1 。

解题思路

枚举

class Solution {
    public int pivotInteger(int n) {
        //等差数列求和
        int ans = 0;
        for(int i = 1,sum = 0; i <= n; i++) {
            sum += i;
            if(sum*2 == n*(n+1)/2+i) return i;
            else if(sum*2 > n*(n+1)/2+i) break;
        }
        return -1;
    }
}

复杂度分析

二分查找

class Solution {
    public int pivotInteger(int n) {
        //化简+二分 i*(i+1)/2*2 == n*(n+1)/2+i -> i*i = n*(n+1)/2
        int res = n*(n+1)/2,left = 1,right = n;
        while(left <= right) { //也可直接使用api函数(int) Math.sqrt(res)
            int mid = (left+right)>>1;
            if(mid*mid == res) return mid;
            else if(mid*mid > res) right = mid-1;
            else left = mid+1;
        }
        return -1;
    }
}

复杂度分析

上一篇下一篇

猜你喜欢

热点阅读