要求
给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 “对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] = 2 * arr[2 * i]” 时,返回 true;否则,返回 false。
示例 1:
输入:arr = [3,1,3,6]
输出:false
示例 2:
输入:arr = [2,1,2,6]
输出:false
示例 3:
输入:arr = [4,-2,2,-4]
输出:true
解释:可以用 [-2,-4] 和 [2,4] 这两组组成 [-2,-4,2,4] 或是 [2,4,-2,-4]
示例 4:
输入:arr = [1,2,4,16,8,4]
输出:false
提示:
- 0 <= arr.length <= 3 * 104
- arr.length 是偶数
- -105 <= arr[i] <= 105
核心代码
class Solution:
def canReorderDoubled(self, arr: List[int]) -> bool:
a_dict = Counter(arr)
for x in sorted(a_dict,key=lambda x:abs(x)):
if a_dict[x] > a_dict[2 * x]:
return False
a_dict[2 * x] -= a_dict[x]
return True
解题思路:我们对数字进行统计,统计完成我们对齐进行排序,如果x的个数大于2x的个数 必定有x无法和2x匹配,返回Flase,更新2x的个数=(2x-x)的个数 直到2x个数为0 才返回true。