在Python中检查我们是否可以通过对其当前总和更新列表索引来达到目标

在Python中检查我们是否可以通过对其当前总和更新列表索引来达到目标

假设我们有一个名为target的数字列表。现在让我们考虑一个与给定列表长度相同的列表X,并且X填充了1。我们可以随意执行以下操作:取X中的任何索引i,并将X[i]设置为X的当前总和。最终检查X是否可以转换为target。

所以,如果输入是target = [5,9,3],则输出将为True,因为最初X = [1,1,1],然后用总和3更新它,数组将变为[1,1,3],当前总和为5,将其更新为[5,1,3],当前总和9,因此列表将为[5,9,3],并且它是目标。

解决此问题,我们将按照以下步骤执行:

  • 如果nums只有一个元素,则
    • 当nums为1时返回true
  • q:具有数字nums的所有负值的队列
  • 将q作为堆
  • s:nums中所有数字的总和
  • ok:True
  • 当ok为True时,执行
    • x:从堆中删除元素并对其取反
    • d:s-x
    • 如果d> 1,则x2:x mod d,否则为1
    • s:s + x2-x
    • ok:x不同于x2
    • x:x2
    • 将-x插入堆q
  • 当q中所有元素均为-1时,返回true

让我们看以下实现以获得更好的理解:

更多Python相关文章,请阅读:Python 教程

示例

class Solution:
   def solve(self, nums):
      if len(nums) == 1:
         return nums == [1]
      from heapq import heapify, heappop, heappush

      q = [-x for x in nums]
      heapify(q)
      s = sum(nums)
      ok = True

      while ok:
         x = -heappop(q)
         d = s - x
         x2 = x % d if d > 1 else 1
         s += x2 - x
         ok = x != x2
         x = x2
         heappush(q, -x)

      return all(x == -1 for x in q)

ob = Solution()
target = [5, 9, 3]
print(ob.solve(target))

输入

[5, 9, 3]

输出

True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程