LeetCode 954. 二倍数对数组(map计数)
文章目录
- 1. 题目
- 2. 解题
1. 题目
给定一个长度为偶数的整数数组 A,只有对 A 进行重组后可以满足 对于每个 0 <= i < len(A) / 2
,都有 A[2 * i + 1] = 2 * A[2 * i]
时,返回 true;否则,返回 false。
示例 1:
输入:[3,1,3,6]
输出:false示例 2:
输入:[2,1,2,6]
输出:false示例 3:
输入:[4,-2,2,-4]
输出:true
解释:我们可以用 [-2,-4] 和 [2,4] 这两组组成 [-2,-4,2,4] 或是 [2,4,-2,-4]示例 4:
输入:[1,2,4,16,8,4]
输出:false提示:
0 <= A.length <= 30000
A.length 为偶数
-100000 <= A[i] <= 100000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/array-of-doubled-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- map计数,检查 每个元素的2倍 或者 偶数的一半 是否存在
class Solution {public:bool canReorderDoubled(vector<int>& A) {map<int,int> m;for(int a : A)m[a]++;int count = 0, a, c;for(auto it = m.begin(); it != m.end(); ++it){a = it->first;if(m.count(2*a) && m[2*a] > 0)//两倍的数存在{if(a != 0)c = min(m[2*a], m[a]);else// a == 0c = m[a]/2;count += 2*c;m[a] -= c;m[2*a] -= c;}if(a%2==0 && m.count(a/2) && m[a/2] > 0)//是偶数,且一半存在{if(a != 0)c = min(m[a/2], m[a]);elsec = m[a]/2;count += 2*c;m[a] -= c;m[a/2] -= c;}}return count == A.size();}
};
276 ms 53.7 MB
or
下面的写法思路更清晰
class Solution {public:bool canReorderDoubled(vector<int>& A) {map<int,int> m;for(int a : A)m[a]++;int count = 0, a;for(auto it = m.begin(); it != m.end(); ++it){a = it->first;if(it->second == 0)continue;if(a < 0){if(a&1)//负奇数,不能匹配return false;m[a/2] -= m[a];if(m[a/2] < 0)//个数不够不能匹配return false;}else if(a == 0){if(m[a]&1)//0 奇数个,不能匹配return false;}else // (a > 0){m[2*a] -= m[a];if(m[2*a] < 0)//个数不够不能匹配return false;}}return true;}
};
236 ms 54 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 954. 二倍数对数组(map计数)相关推荐
- leetcode:954. 二倍数对数组
954. 二倍数对数组 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/array-of-doubled-pairs/ 给定一个长度为偶数的整 ...
- LeetCode 954. 二倍数对数组
题目链接: 力扣https://leetcode-cn.com/problems/array-of-doubled-pairs/ [分析]通过哈希表和排序来解决这个问题,先统计0的个数,因为0这个元素 ...
- Javascript(JS) leetcode 954. 二倍数对数组
给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 "对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] = 2 * ...
- 《LeetCode刷题》954. 二倍数对数组(java篇)
题目描述: 给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 "对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] ...
- leetcode 954. Array of Doubled Pairs | 954. 二倍数对数组(Java)
题目 https://leetcode.com/problems/array-of-doubled-pairs/ 题解 对于每一个数n来说,它要么和 n / 2 凑一对,要么和 n * 2 凑一对. ...
- leetcode-954. 二倍数对数组
leetcode-954. 二倍数对数组 题源 知识点 思路 代码 python javascript java C 题源 954. 二倍数对数组 知识点 哈希表 对于哈希表,我有了新认识,以前我感觉 ...
- LeetCode中等题之二倍数对数组
题目 给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 "对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] = 2 ...
- leetcode954. 二倍数对数组(treemap)
给定一个长度为偶数的整数数组 A,只有对 A 进行重组后可以满足 "对于每个 0 <= i < len(A) / 2,都有 A[2 * i + 1] = 2 * A[2 * i] ...
- leetcode954.二倍数对数组C++(绝对值排序)
链接: https://leetcode-cn.com/problems/array-of-doubled-pairs/ 描述和示例: 代码: class Solution {public:bool ...
最新文章
- 分享经济:我的,就是你的
- C语言再学习 -- 常用头文件和函数(转)
- Visual C#3.0新特性概览
- 潜在语义分析(LSA)相关知识
- WAP开发笔记(1)-.net移动页面中html控件不能直接显示的解决
- python对象属性赋值_关于python对象 中dict属性赋值的疑问
- Linux系统redis安装配置
- C语言日志库zlog的简单配置及使用
- photoshop7.0绿色迷你免安装版
- 基于Python的房价影响因素分析
- NPOI 操作word 创建页眉页脚,页眉中插入图片
- GPIO output level 和 GPIO Pull-up/Pull-down的区别
- MCS51 程序存储器(ROM)
- 安捷伦万用表--Agilent34401A数字万用表串口发送数据只上位机使用说明
- 再次登顶GitHub,阿里内网首次自曝炫彩版微服务响应式与K8S手册
- 骁龙8gen1Plus和骁龙8gen1区别
- ICPR 2018|阿里巴巴读光OCR及MTWI数据集亮相引关注
- 好的APP用户体验需要满足这5点要求,你做到了吗?
- c语言花样编程,C语言表达式的花样表达
- Linux脚本编程:sudo命令下设置定时任务
热门文章
- patator mysql 字典_利用patator进行子域名爆破
- 乘基取整法是什么_深入理解计算机系统(六):进制间的转换原理
- 重写__repr__与__str__函数
- java 产生无重复的随机数,Java创建无重复的随机数
- linux头文件 库,Linux操作系统的头文件和库文件搜索路径
- 获取系统信息1——linux系统中的时间
- s5pv210——LCD的原理和实战
- appium+python自动化项目实战(二):项目工程结构
- leetcode - Linked List Cycle
- 基于Silverlight+WCF的SAAS开发平台TAP(二)之核心技术