1497. Check If Array Pairs Are Divisible by k

Given an array of integers arr of even length n and an integer k.

We want to divide the array into exactly n / 2 pairs such that the sum of each pair is divisible by k.

Return True If you can find a way to do that or False otherwise.

 

Example 1:

Input: arr = [1,2,3,4,5,10,6,7,8,9], k = 5
Output: true
Explanation: Pairs are (1,9),(2,8),(3,7),(4,6) and (5,10).

Example 2:

Input: arr = [1,2,3,4,5,6], k = 7
Output: true
Explanation: Pairs are (1,6),(2,5) and(3,4).

Example 3:

Input: arr = [1,2,3,4,5,6], k = 10
Output: false
Explanation: You can try all possible pairs to see that there is no way to divide arr into 3 pairs each with sum divisible by 10.

Example 4:

Input: arr = [-10,10], k = 2
Output: true

Example 5:

Input: arr = [-1,1,-2,2,-3,3,-4,4], k = 3
Output: true

 

Constraints:

  • arr.length == n
  • 1 <= n <= 10^5
  • n is even.
  • -10^9 <= arr[i] <= 10^9
  • 1 <= k <= 10^5
class Solution {
    public boolean canArrange(int[] arr, int k) {
        int n = arr.length;
        for(int i = 0; i < n; i++){
            arr[i] = ((arr[i] % k) + k) % k;
        }
        Arrays.sort(arr);
        int zero = 0;
        while(zero < n && arr[zero] == 0) zero++;
        if(zero % 2 != 0) return false;
        for(int left = zero, right = n - 1; left < right;){
            if(arr[left] + arr[right] != k) return false;
            else{
                right--;
                left++;
            }
        }
        return true;
    }
}

思路:把数组里的书normalize成[0, k-1], 完了之后算0的数量,如果是奇数铁return fasle

排序后加首尾,如果不等于k也是铁false

class Solution {
    public boolean canArrange(int[] arr, int k) {
        int[] frequency = new int[k];
        for(int num : arr){
            num %= k;
            if(num < 0) num += k;
            frequency[num]++;
        }
        if(frequency[0]%2 != 0) return false;
        
        for(int i = 1; i <= k/2; i++)
            if(frequency[i] != frequency[k-i]) return false;
            
        return true;
    }
}

这个也差不多一个道理,用一个frequency数组存mod后的数组元素,然后对比相对位置的frequency是否相等即可

posted @ 2020-06-30 02:37  Schwifty  阅读(142)  评论(0)    收藏  举报