您的位置:首页 > 职场人生

面试:数组:数组配对

2016-05-02 21:11 661 查看
给定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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: