LeetCode 1497. 检查数组对是否可以被 k 整除(余数配对)
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 整除(余数配对)相关推荐
- 2021-12-12 Leetcode 1497.检查数组对是否可以被 k 整除
第一种方法:尝试数字两两组合,看是否为 k 的倍数,写不出来 第二种方法(参考别人的):将每个数字对 k 取模,放入相应的桶里,看 1 与 k-1 这样的队伍的个数是否相同,如果是就是正确的,不是就是 ...
- LeetCode 1497. 检查数组对是否可以被 k 整除
public static boolean canArrange(int[] arr, int k) {int[] h = new int[k];for(int num : arr){int mod ...
- 取余,模运算,余数的正负问题,1497. 检查数组对是否可以被 k 整除
首先,我们来看数学中对余数的定义 0到除数之间的整数,所以当除数是负数的时候,余数也是负数. 举个例子: 接下来,我们看计算机中余数是怎么求的??? 所有的语言和计算器都遵循了让商靠近零的原则 在C+ ...
- 刷爆力扣之检查数组对是否可以被 k 整除
刷爆力扣之检查数组对是否可以被 k 整除 HELLO,各位看官大大好啊,我是阿呆
- leetcode1497. 检查数组对是否可以被 k 整除
给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n . 现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除. 如果存在这样的分法,请返回 True :否则 ...
- LeetCode 2176. 统计数组中相等且可以被整除的数对
文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k ,请你返回满足 0 <= i < j < n ,nums[i] ...
- Leetcode题解974 能被和可被 K 整除的子数组
给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续.非空) 子数组 的数目. 子数组 是数组的 连续 部分. 难度:Hard 此题是前缀和的经典应用题的一个变形 如果 ...
- 560. 和为K的子数组 974. 和可被 K 整除的子数组 (哈希表)
引言 这两道题非常相似,也是对哈希表运用的考察,两道题合到一起总结一下 560. 和为K的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入 ...
- LeetCode 1752. 检查数组是否经排序和轮转得到
文章目录 1. 题目 2. 解题 1. 题目 给你一个数组 nums . nums 的源数组中,所有元素与 nums 相同,但按非递减顺序排列. 如果 nums 能够由源数组轮转若干位置(包括 0 个 ...
最新文章
- Android中Handler消息机制
- wamp配置虚拟主机
- java was started but returned exit code = 1
- 【软件安装】sublime安装方法
- python 中的 for-else 和 while-else 语句
- 精通Android3笔记--第四章
- 曹大:我的快速阅读法
- linux下安装php两种模式区别
- linux下如何升级gcc和g++编译器
- Android异常总结---1.异常原因: java.lang.IllegalArgumentException: URI: content://com.android.contacts/con
- pycharm(Idea)破解到2100年
- 最新版本微信小程序开发工具的使用
- PHP面试要点---mysql
- Redis基本应用及Java代码实现
- mt,sgd,gd含义
- 在c语言中出现的int错误类型,【揭秘】C语言类型转换时发生了什么?
- 从一个故事开始讲递归
- Galahad(板子:区间不重复数字的和,树状数组/线段树)
- ppc64le处理器国产power8服务器CentOS7.2安装open-jdk
- 电信管理局:2011推进三网融合走向深入
热门文章
- 【python】错误、异常和文件---复习笔记
- libsvm C++ 代码参数说明汇总
- 能设值多个rowkey吗_顶楼送了露台,悄悄搭建阳光房,偏偏我家露台多个帽子,能拆吗?...
- linux这样去掉文件里高亮字体
- 互联网产品 从设计到运营 这中间提高须要关注的站点
- opencv学习笔记[9]:Opencv的基本数据类型和矩阵结构
- CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程!...
- 回溯算法--8皇后问题
- 智能客户端研究笔记(三)
- 困扰多年的PCB散热问题终于可以解决了!