面试:数组:数组配对

本文介绍了一种判断给定整数数组是否可以通过配对使每对之和被特定整数k整除的算法。该算法首先统计每个可能余数的数量,并检查是否满足配对条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 给定N个整数,N为偶数,是否可以找到N/2对,使得每对和能被k整除。(每个元素只能出现在一个配对中)

  • 算法

    1. 生成A[k]数组,大小是k,A[i]记录余数是i的元素的个数。
    2. 被k整除的个数是否是偶数,若是奇数,false;
    3. k是偶数,k/2是否 是偶数
    4. 余数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);

         }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值