leetcode954. Array of Doubled Pairs

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011732358/article/details/85015428

题目链接
题目:给定一个长度为偶数的整数数组 A,只有对 A 进行重组后可以满足 “对于每个 0 <= i < len(A) / 2,都有 A[2 * i + 1] = 2 * A[2 * i]” 时,返回 true;否则,返回 false。

示例 1:
输入:[3,1,3,6]
输出:false
示例 2:
输入:[4,-2,2,-4]
输出:true
解释:我们可以用 [-2,-4] 和 [2,4] 这两组组成 [-2,-4,2,4] 或是 [2,4,-2,-4]

思路:对数组进行排序,然后如果是大于等于0的数,比较其2倍的数的个数,使其匹配。小于0的数,比较其1/2的数的个数,使其匹配,如果都能完全匹配,则返回true。

class Solution {
    public boolean canReorderDoubled(int[] A) {
        int len = A.length;
        if(len == 0){
            return true;
        }
        int m, n;
        Map<Integer, Integer> map = new TreeMap<>();
        //把数组A每个元素的个数进行排序
        for(int key : A){
            map.put(key, map.getOrDefault(key, 0) + 1);
        }
        for(int key : map.keySet()){
            if(map.get(key) == 0){
                continue;
            }
            m = map.get(key);
            if(key < 0){
                key = key / 2;//比如-4在treemap中排在-2前面,所以是key/2
                
            }else{
                key = key * 2;//比如2在treemap中排在4前面,所以是key*2
            }
            n = map.getOrDefault(key, 0);
            if(m > n){
                return false;
            }
            map.put(key, n - m);
        }
        return true;
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u011732358/article/details/85015428