1497. 检查数组对是否能被k整除
💡
原文英文,约600词,阅读约需3分钟。
📝
内容提要
给定一个整数数组和整数k,判断能否将数组分成n/2对,使每对的和能被k整除。算法利用模运算性质:若(a + b) % k == 0,则(a % k + b % k) % k == 0。步骤包括:初始化余数计数数组,遍历数组计算余数,检查配对可能性。若余数0和k/2的计数为偶数,且其他余数i与k-i计数相等,则返回true。时间复杂度为O(n + k),空间复杂度为O(k)。
🎯
关键要点
- 给定一个整数数组和整数k,判断能否将数组分成n/2对,使每对的和能被k整除。
- 算法基于模运算性质:若(a + b) % k == 0,则(a % k + b % k) % k == 0。
- 步骤包括:初始化余数计数数组,遍历数组计算余数,检查配对可能性。
- 初始化余数计数数组,创建长度为k的数组,初始化为零,用于计数。
- 遍历数组,计算每个数的余数并更新计数。
- 检查配对可能性:余数0和k/2的计数必须为偶数,其他余数i与k-i的计数必须相等。
- 时间复杂度为O(n + k),空间复杂度为O(k)。
- 通过计数余数,减少了从O(n^2)到O(n + k)的复杂度。
- 算法能够正确处理负数,并适用于任何正整数k。
➡️