题意
传送门 LeeCode 1497. 检查数组对是否可以被 k 整除
题解
把数组恰好分成 n / 2 n/2 n/2 对,以使每对数字的和都能够被 k k k 整除,即对于每对数字 x , y x,y x,y 都有
x + y ≡ 0 m o d ( k ) x+y\equiv 0\ mod(k) x+y≡0 mod(k)
遍历一遍数组,统计各元素模 k k k 的值,判断余数为 x ( 1 ≤ x ≤ k − 1 ) x(1\leq x \leq k-1) x(1≤x≤k−1) 与 k − x k-x k−x 的元素数是否相等,余数为 0 0 0 判断元素数是否为偶数。
class Solution
{
public:
bool canArrange(vector<int> &arr, int k)
{
vector<int> num(k);
for (int x : arr) num[(x % k + k) % k]++;
if (num[0] & 1) return 0;
for (int i = 1; i < k; i++)
{
if (num[i] == 0) continue;
if (num[i] != num[k - i]) return 0;
}
return 1;
}
};