文章目录

  • 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计数)相关推荐

  1. leetcode:954. 二倍数对数组

    954. 二倍数对数组 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/array-of-doubled-pairs/ 给定一个长度为偶数的整 ...

  2. LeetCode 954. 二倍数对数组

    题目链接: 力扣https://leetcode-cn.com/problems/array-of-doubled-pairs/ [分析]通过哈希表和排序来解决这个问题,先统计0的个数,因为0这个元素 ...

  3. Javascript(JS) leetcode 954. 二倍数对数组

    给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 "对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] = 2 * ...

  4. 《LeetCode刷题》954. 二倍数对数组(java篇)

    题目描述: 给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 "对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] ...

  5. leetcode 954. Array of Doubled Pairs | 954. 二倍数对数组(Java)

    题目 https://leetcode.com/problems/array-of-doubled-pairs/ 题解 对于每一个数n来说,它要么和 n / 2 凑一对,要么和 n * 2 凑一对. ...

  6. leetcode-954. 二倍数对数组

    leetcode-954. 二倍数对数组 题源 知识点 思路 代码 python javascript java C 题源 954. 二倍数对数组 知识点 哈希表 对于哈希表,我有了新认识,以前我感觉 ...

  7. LeetCode中等题之二倍数对数组

    题目 给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 "对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] = 2 ...

  8. leetcode954. 二倍数对数组(treemap)

    给定一个长度为偶数的整数数组 A,只有对 A 进行重组后可以满足 "对于每个 0 <= i < len(A) / 2,都有 A[2 * i + 1] = 2 * A[2 * i] ...

  9. leetcode954.二倍数对数组C++(绝对值排序)

    链接: https://leetcode-cn.com/problems/array-of-doubled-pairs/ 描述和示例: 代码: class Solution {public:bool ...

最新文章

  1. 分享经济:我的,就是你的
  2. C语言再学习 -- 常用头文件和函数(转)
  3. Visual C#3.0新特性概览
  4. 潜在语义分析(LSA)相关知识
  5. WAP开发笔记(1)-.net移动页面中html控件不能直接显示的解决
  6. python对象属性赋值_关于python对象 中dict属性赋值的疑问
  7. Linux系统redis安装配置
  8. C语言日志库zlog的简单配置及使用
  9. photoshop7.0绿色迷你免安装版
  10. 基于Python的房价影响因素分析
  11. NPOI 操作word 创建页眉页脚,页眉中插入图片
  12. GPIO output level 和 GPIO Pull-up/Pull-down的区别
  13. MCS51 程序存储器(ROM)
  14. 安捷伦万用表--Agilent34401A数字万用表串口发送数据只上位机使用说明
  15. 再次登顶GitHub,阿里内网首次自曝炫彩版微服务响应式与K8S手册
  16. 骁龙8gen1Plus和骁龙8gen1区别
  17. ICPR 2018|阿里巴巴读光OCR及MTWI数据集亮相引关注
  18. 好的APP用户体验需要满足这5点要求,你做到了吗?
  19. c语言花样编程,C语言表达式的花样表达
  20. Linux脚本编程:sudo命令下设置定时任务

热门文章

  1. patator mysql 字典_利用patator进行子域名爆破
  2. 乘基取整法是什么_深入理解计算机系统(六):进制间的转换原理
  3. 重写__repr__与__str__函数
  4. java 产生无重复的随机数,Java创建无重复的随机数
  5. linux头文件 库,Linux操作系统的头文件和库文件搜索路径
  6. 获取系统信息1——linux系统中的时间
  7. s5pv210——LCD的原理和实战
  8. appium+python自动化项目实战(二):项目工程结构
  9. leetcode - Linked List Cycle
  10. 基于Silverlight+WCF的SAAS开发平台TAP(二)之核心技术