给定N个整数,N为偶数,是否可以找到N/2对,使得每对和能被k整除。(每个元素只能出现在一个配对中)
算法
- 生成A[k]数组,大小是k,A[i]记录余数是i的元素的个数。
- 被k整除的个数是否是偶数,若是奇数,false;
- k是偶数,k/2是否 是偶数
- 余数i和余数k-i的个数是否相等
import java.util.*;
public class Solution {
public boolean checkPairable(int[] nums,int k){
if(k<=0) return false;
//额外的数组保存余数
int[] counts = new int[k];
for(int num:nums)
counts[num%k] ++; //初始化数组
// 整除k的个数是否是偶数
if(counts[0]%2 != 0) return false;
//k是欧式,查看k/2是否是偶数
if(k%2==0){
if(counts[k/2]%2!=0) return false;
}
for(int i=1;i<=k/2;i++)
{
//余数配对
if(counts[i]!=counts[k-i])
return false;
}
return true;
}
public static void main(String[] args) {
Solution s=new Solution();
int[] test={5,2,4,0,1,4,1};
int k=3;
boolean res=s.checkPairable(test,k);
System.out.println(res);
}
}