检查 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
- 如果 freq[item] 为 0,则
- 返回 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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP