給你一個整數數組 arr
和一個整數 k
,其中數組長度是偶數,值爲 n
。
現在需要把數組恰好分成 n / 2
對,以使每對數字的和都能夠被 k
整除。
如果存在這樣的分法,請返回 True ;否則,返回 False 。
示例 1:
輸入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5 輸出:true 解釋:劃分後的數字對爲 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。
示例 2:
輸入:arr = [1,2,3,4,5,6], k = 7 輸出:true 解釋:劃分後的數字對爲 (1,6),(2,5) 以及 (3,4) 。
示例 3:
輸入:arr = [1,2,3,4,5,6], k = 10 輸出:false 解釋:無法在將數組中的數字分爲三對的同時滿足每對數字和能夠被 10 整除的條件。
示例 4:
輸入:arr = [-10,10], k = 2 輸出:true
示例 5:
輸入:arr = [-1,1,-2,2,-3,3,-4,4], k = 3 輸出:true
提示:
arr.length == n
1 <= n <= 10^5
n
爲偶數-10^9 <= arr[i] <= 10^9
1 <= k <= 10^5
C++
class Solution {
public:
bool canArrange(vector<int>& arr, int k)
{
vector<int> tmp(k,0);
for(auto it:arr)
{
tmp[(it%k+k)%k]++;
}
for(int i=1;i<k/2;i++)
{
if(tmp[i]!=tmp[k-i])
{
return false;
}
}
if(tmp[0]%2)
{
return false;
}
if(0==k%2 && 1==tmp[k/2]%2)
{
return false;
}
return true;
}
};