在Python中使总和可被P整除的程序

在Python中使总和可被P整除的程序

假设有一个数组nums和另一个值p,我们删除最小的子数组(而不是整个数组),使剩余值的总和可被p整除。如果没有这样的子数组,则找到我们需要删除的最小子数组的长度,否则返回-1。

因此,如果输入如下nums = [8,2,6,5,3] p = 7,则输出将为1,因为如果我们删除3,则总和将为21,可以被7整除。

要解决此问题,我们将遵循以下步骤 –

  • ans := infinity
  • s :=(nums中所有元素的总和)mod p
  • d := 包含键值对 {0:-1}的映射
  • cum := 0
  • 如果s与0相同,则
    • 返回0
  • 对于i在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教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程