用 Python 编写一个程序,让和可以被 P 整除
pythonserver side programmingprogramming更新于 2025/11/26 12:28:17
假设我们有一个数组 nums 和另一个值 p,我们删除最小的子数组(而不是整个数组),使得剩余值的总和可以被 p 整除。我们必须找到需要删除的最小子数组的长度,如果没有这样的子数组则返回 -1。
因此,如果输入为 nums = [8,2,6,5,3] p = 7,则输出将为 1,因为如果我们删除 3,则总和将为 21,并且可以被 7 整除。
要解决这个问题,我们将遵循以下步骤 −
- ans := infinity
- s := (nums 中所有元素的总和) mod p
- d := a map 包含键值对 {0: -1}
- cum := 0
- 如果 s 与 0 相同,则
- 返回 0
- for i in范围从 0 到 nums 的大小,执行
- cum := cum + nums[i]
- r := cum mod p
- 如果 (r-s)mod p 存在于 d 中,则
- ans := ans 和 i 的最小值 - d[(r-s) mod p]
- d[r] := i
- 如果 ans < nums 的大小,则返回 ans,否则返回 -1
示例
让我们看看下面的实现以便更好地理解 −
def solve(nums, p):
ans = float("inf")
s = sum(nums) % p
d = {0:-1}
cum = 0
if s == 0:
return 0
for i in range(len(nums)):
cum+=nums[i]
r = cum%p
if (r-s)%p in d:
ans = min(ans, i-d[(r-s)%p])
d[r] = i
return ans if ans<len(nums) else -1
nums = [8,2,6,5,3]
p = 7
print(solve(nums, p))
输入
[8,2,6,5,3], 7
输出
1
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

