1. 题目

给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。

现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除。

如果存在这样的分法,请返回 True ;否则,返回 False 。

示例 1:
输入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5
输出:true
解释:划分后的数字对为 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。示例 2:
输入:arr = [1,2,3,4,5,6], k = 7
输出:true
解释:划分后的数字对为 (1,6),(2,5) 以及 (3,4) 。示例 3:
输入:arr = [1,2,3,4,5,6], k = 10
输出:false
解释:无法在将数组中的数字分为三对的同时满足每对数字和能够被 10 整除的条件。示例 4:
输入:arr = [-10,10], k = 2
输出:true示例 5:
输入:arr = [-1,1,-2,2,-3,3,-4,4], k = 3
输出:true提示:
arr.length == n
1 <= n <= 10^5
n 为偶数
-10^9 <= arr[i] <= 10^9
1 <= k <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/check-if-array-pairs-are-divisible-by-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 对所有的数求余,如有负数再 +k,再求余
  • multiset 不断的删除 一个数 a,和 k-a
class Solution { //C++
public:bool canArrange(vector<int>& arr, int k) {multiset<int> s;for(auto a : arr)s.insert((a%k+k)%k);while(!s.empty()){int a = *s.begin();s.erase(s.begin());auto it = s.find((k-a)%k);if(it == s.end())return false;elses.erase(it);}return true;}
};

804 ms 102.1 MB

  • 或者 用数组计数加速
class Solution { //C++
public:bool canArrange(vector<int>& arr, int k) {vector<int> freq(k,0);for(auto a : arr)freq[(a%k+k)%k]++;if(freq[0]&1)//直接能被整除的是奇数个,不行return false;for(int i = 1; i <= k/2; ++i)if(freq[i] != freq[k-i])return false;return true;}
};

268 ms 61.8 MB

class Solution:# py3def canArrange(self, arr: List[int], k: int) -> bool:freq = [0]*kfor a in arr:freq[(a%k+k)%k] += 1if freq[0]&1:return Falsefor i in range(1, k//2+1):if freq[i] != freq[k-i]:return Falsereturn True

152 ms 24.9 MB

LeetCode 1497. 检查数组对是否可以被 k 整除(余数配对)相关推荐

  1. 2021-12-12 Leetcode 1497.检查数组对是否可以被 k 整除

    第一种方法:尝试数字两两组合,看是否为 k 的倍数,写不出来 第二种方法(参考别人的):将每个数字对 k 取模,放入相应的桶里,看 1 与 k-1 这样的队伍的个数是否相同,如果是就是正确的,不是就是 ...

  2. LeetCode 1497. 检查数组对是否可以被 k 整除

    public static boolean canArrange(int[] arr, int k) {int[] h = new int[k];for(int num : arr){int mod ...

  3. 取余,模运算,余数的正负问题,1497. 检查数组对是否可以被 k 整除

    首先,我们来看数学中对余数的定义 0到除数之间的整数,所以当除数是负数的时候,余数也是负数. 举个例子: 接下来,我们看计算机中余数是怎么求的??? 所有的语言和计算器都遵循了让商靠近零的原则 在C+ ...

  4. 刷爆力扣之检查数组对是否可以被 k 整除

    刷爆力扣之检查数组对是否可以被 k 整除 HELLO,各位看官大大好啊,我是阿呆

  5. leetcode1497. 检查数组对是否可以被 k 整除

    给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n . 现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除. 如果存在这样的分法,请返回 True :否则 ...

  6. LeetCode 2176. 统计数组中相等且可以被整除的数对

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k ,请你返回满足 0 <= i < j < n ,nums[i] ...

  7. Leetcode题解974 能被和可被 K 整除的子数组

    给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续.非空) 子数组 的数目. 子数组 是数组的 连续 部分. 难度:Hard 此题是前缀和的经典应用题的一个变形 如果 ...

  8. 560. 和为K的子数组 974. 和可被 K 整除的子数组 (哈希表)

    引言 这两道题非常相似,也是对哈希表运用的考察,两道题合到一起总结一下 560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入 ...

  9. LeetCode 1752. 检查数组是否经排序和轮转得到

    文章目录 1. 题目 2. 解题 1. 题目 给你一个数组 nums . nums 的源数组中,所有元素与 nums 相同,但按非递减顺序排列. 如果 nums 能够由源数组轮转若干位置(包括 0 个 ...

最新文章

  1. Android中Handler消息机制
  2. wamp配置虚拟主机
  3. java was started but returned exit code = 1
  4. 【软件安装】sublime安装方法
  5. python 中的 for-else 和 while-else 语句
  6. 精通Android3笔记--第四章
  7. 曹大:我的快速阅读法
  8. linux下安装php两种模式区别
  9. linux下如何升级gcc和g++编译器
  10. Android异常总结---1.异常原因: java.lang.IllegalArgumentException: URI: content://com.android.contacts/con
  11. pycharm(Idea)破解到2100年
  12. 最新版本微信小程序开发工具的使用
  13. PHP面试要点---mysql
  14. Redis基本应用及Java代码实现
  15. mt,sgd,gd含义
  16. 在c语言中出现的int错误类型,【揭秘】C语言类型转换时发生了什么?
  17. 从一个故事开始讲递归
  18. Galahad(板子:区间不重复数字的和,树状数组/线段树)
  19. ppc64le处理器国产power8服务器CentOS7.2安装open-jdk
  20. 电信管理局:2011推进三网融合走向深入

热门文章

  1. 【python】错误、异常和文件---复习笔记
  2. libsvm C++ 代码参数说明汇总
  3. 能设值多个rowkey吗_顶楼送了露台,悄悄搭建阳光房,偏偏我家露台多个帽子,能拆吗?...
  4. linux这样去掉文件里高亮字体
  5. 互联网产品 从设计到运营 这中间提高须要关注的站点
  6. opencv学习笔记[9]:Opencv的基本数据类型和矩阵结构
  7. CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程!...
  8. 回溯算法--8皇后问题
  9. 智能客户端研究笔记(三)
  10. 困扰多年的PCB散热问题终于可以解决了!