📌  相关文章
📜  元素加K大于所有其他元素之和的位置数(1)

📅  最后修改于: 2023-12-03 15:36:44.827000             🧑  作者: Mango

元素加K大于所有其他元素之和的位置数

给定一个正整数数组,找到一个位置,使得该位置所在的元素加上一个给定的整数K后,大于等于数组中所有其他元素之和。

函数签名
def position_with_sum_greater_than_other_elements(nums: List[int], k: int) -> int:
    pass
输入格式
  • nums: 给定的正整数数组,长度为N($1 \le N \le 10^4$),其中每个元素不超过$10^9$。
  • k: 给定的整数,不超过$10^9$。
输出格式
  • 返回一个整数表示满足条件的位置,如果不存在,则返回-1。
解题思路

考虑到该位置所在的元素加上K大于等于数组中其他所有元素之和,且其他所有元素之和就是该位置元素除外的元素之和。因此,我们可以先计算整个数组的元素之和,然后遍历数组中的每个元素,用整个数组的元素和减去该元素,再加上K,若该位置的元素大于得到的值,则返回该位置。

代码实现
from typing import List

def position_with_sum_greater_than_other_elements(nums: List[int], k: int) -> int:
    n = len(nums)
    if n == 1:
        return 0 if nums[0] + k > 0 else -1

    # 计算整个数组元素之和
    s = sum(nums)

    # 遍历数组
    sum_except_i = 0
    for i in range(n):
        if sum_except_i + k < s - nums[i]:
            return i
        sum_except_i += nums[i]

    return -1
时间复杂度
  • 时间复杂度:$O(N)$
  • 空间复杂度:$O(1)$
测试样例
assert position_with_sum_greater_than_other_elements([1, 2, 3, 4, 5], 2) == 2
assert position_with_sum_greater_than_other_elements([1, 2, 3, 4, 5], 10) == -1
assert position_with_sum_greater_than_other_elements([-1, 2, -1, 4, -1], 1) == 3