LeetCode刷题日记2022-4-1/954. 二倍数对数组-Counter&Sorted函数

954. 二倍数对数组

  • 题目描述
  • 题解思路
  • 题解代码

题目描述

给定一个长度为偶数的整数数组 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]

提示:

  • 0 <= arr.length <= 3 * 104
  • arr.length 是偶数
  • -105 <= arr[i] <= 105

题解思路

题目可知

在数组中

  • 如果每个数跟他的二倍都是成对出现的 我们就返回True
  • 特别的 针对值为0的情况 也就是0的个数必须为偶数 如果不是我们也返回False

因此我们可以用Counter函数进行统计每个数字出现的次数

然后从小到大遍历Counter中的数

题解代码

class Solution:
    def canReorderDoubled(self, arr: List[int]) -> bool:
        cnt=Counter(arr)

        if cnt[0]%2:
            return False
        for x in sorted(cnt,key=abs):
            if cnt[2*x]

你可能感兴趣的:(Leetcode每日一题,leetcode,算法,python)