📅  最后修改于: 2023-12-03 15:36:44.827000             🧑  作者: Mango
给定一个正整数数组,找到一个位置,使得该位置所在的元素加上一个给定的整数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$。考虑到该位置所在的元素加上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
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