1497. Check If Array Pairs Are Divisible by k
Description
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.
Constraints:
arr.length == n1 <= n <= 105nis even.-109 <= arr[i] <= 1091 <= k <= 105
Solutions
Solution 1: Counting Remainders
The sum of two numbers \(a\) and \(b\) is divisible by \(k\) if and only if the sum of their remainders when divided by \(k\) is divisible by \(k\).
Therefore, we can count the remainder of each number in the array when divided by \(k\), and record them in an array \(\textit{cnt}\). Then we traverse the array \(\textit{cnt}\). For each number \(i\) in the range \([1,..k-1]\), if the values of \(\textit{cnt}[i]\) and \(\textit{cnt}[k-i]\) are not equal, it means we cannot divide the numbers in the array into \(n/2\) pairs such that the sum of each pair is divisible by \(k\). Similarly, if the value of \(\textit{cnt}[0]\) is not even, it also means we cannot divide the numbers in the array into \(n/2\) pairs such that the sum of each pair is divisible by \(k\).
The time complexity is \(O(n)\), where \(n\) is the length of the array \(\textit{arr}\). The space complexity is \(O(k)\).
1 2 3 4 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |