使用Python查找双倍对数组的程序
假设我们有一个名为nums的数组,其长度为偶数,我们必须检查是否有可能将其重新排序,使得对于每个0 <= i < nums/2大小的元素,nums[2 * i + 1] = 2 * nums[2 * i]。
所以,如果输入是nums=[4,-2,2,-4],那么输出将是True。
为了解决这个问题,我们将遵循以下步骤:
- cnt:= 包含nums中所有元素和它们的频率值的映射
-
对于cnt中基于其绝对值排序的列表中的每个x,执行以下操作
- 如果cnt[x] > cnt[2 * x],则
- 返回False
- cnt[2 * x]:= cnt[2 * x] – cnt[x]
- 如果cnt[x] > cnt[2 * x],则
-
返回True
示例
让我们看下面的实现,以便更好地理解−
from collections import Counter
def solve(nums):
cnt = Counter(nums)
for x in sorted(cnt, key=abs):
if cnt[x] > cnt[2 * x]:
return False
cnt[2 * x] -= cnt[x]
return True
nums = [4,-2,2,-4]
print(solve(nums))
输入
[6,0,8,2,1,5]
输出
True