检查 Python 中数组的元素是否可以根据给定条件进行排列


假设我们有一个名为 nums 的数组。我们必须检查是否可以重新排列 nums 的元素,使其满足以下条件:

因此,如果输入类似于 nums = [8, -4, 4, -8],则输出将为 True,因为如果我们将数组排列为 [-4, -8, 4, 8],则对于 i = 0,nums[2*0 + 1] = 2 * (-4) = -8,对于 i = 1,nums[2*1 + 1] = 2 * 4 = 8

为了解决这个问题,我们将遵循以下步骤:

  • freq := 一个包含 nums 的元素及其频率的映射
  • 对于 nums 中按绝对值排序的每个项目,执行以下操作:
    • 如果 freq[item] 为 0,则
      • 进行下一次迭代
    • 如果 freq[2 * item] 为 0,则
      • 返回 False
    • freq[item] := freq[item] - 1
    • freq[2 * item] := freq[2 * item] - 1
  • 返回 True

示例

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

 实时演示

from collections import defaultdict
def solve(nums):
   freq = defaultdict(int)
   for item in nums:
      freq[item] += 1
   for item in sorted(nums, key = abs):
      if freq[item] == 0:
         continue
      if freq[2 * item] == 0:
         return False
      freq[item] -= 1
      freq[2 * item] -= 1
   return True
nums = [8, -4, 4, -8]
print(solve(nums))

输入

[8, -4, 4, -8]

输出

True

更新于: 2021年1月18日

210 次查看

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.