题意

传送门 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+y0 mod(k)

遍历一遍数组,统计各元素模

k

k

k 的值,判断余数为

x

(

1

x

k

1

)

x(1\leq x \leq k-1)

x(1xk1)

k

x

k-x

kx 的元素数是否相等,余数为

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;
    }
};

版权声明:本文为neweryyy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/neweryyy/article/details/107003263