题目

https://leetcode.com/problems/array-of-doubled-pairs/

题解

对于每一个数n来说,它要么和 n / 2 凑一对,要么和 n * 2 凑一对。
怎么在不回溯的情况下,知道它应该和哪个凑成一对呢?
当你选的n是剩余数组中"绝对值最小的数"时候,n / 2是不存在的,它就只能和 n * 2 凑一对了。
要找到"绝对值最小的数",不可避免的要排序…

class Solution {public boolean canReorderDoubled(int[] arr) {Arrays.sort(arr);HashMap<Integer, Integer> map = new HashMap<>();int p = 0; // 最后一个非正数位置for (int i = 0; i < arr.length; i++) {if (!map.containsKey(arr[i])) map.put(arr[i], 0);map.put(arr[i], map.get(arr[i]) + 1);if (arr[i] <= 0) p = i;}// 处理非正数for (int i = p; i >= 0; i--) {if (failPair(arr, map, i)) return false;}// 处理正数for (int i = p+1; i <arr.length; i++) {if (failPair(arr, map, i)) return false;}return true;}public boolean failPair(int[] arr, HashMap<Integer, Integer> map, int i) {if (map.containsKey(arr[i])) {int c1 = map.get(arr[i]) - 1;if (c1 == 0) map.remove(arr[i]);else map.put(arr[i], c1);if (map.containsKey(2 * arr[i])) { // 匹配一对int c2 = map.get(2 * arr[i]) - 1;if (c2 == 0) map.remove(2 * arr[i]);else map.put(2 * arr[i], c2);} else { // 匹配失败return true;}}return false;}
}

leetcode 954. Array of Doubled Pairs | 954. 二倍数对数组(Java)相关推荐

  1. 【LeetCode】954. Array of Doubled Pairs 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

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

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

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

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

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

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

  5. LeetCode 954. 二倍数对数组(map计数)

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

  6. LeetCode 954. 二倍数对数组

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

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

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

  8. leetcode954. Array of Doubled Pairs

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

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

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

最新文章

  1. linux内核 asmlinkage宏
  2. OpenCV图像处理——对比两张图像差异的位置并标记
  3. 图书资料管理课程设计(附源码和连接)
  4. Spring思维导图,让Spring不再难懂(cache篇)
  5. 报错,atmSecondMenu.vue?bcc9:231 Uncaught (in promise) TypeError: Cannot read property ‘length‘ of null
  6. 【Java】Java 对象头 真的是 32位 吗?
  7. python秒表代码_斌哥教你自制千分秒表(键盘控制)
  8. 查看 linux系统版本,内核,CPU,MEM,位数的相关命令(实验)
  9. IIS7中添加html对! #include 的引用
  10. 【C语言】08-数组
  11. 统计通话次数和时间的软件_通话时间统计app下载-通话时间统计安卓版 v2.2.2 - 安下载...
  12. 软件测试基础知识总结
  13. 【最详细】最全java面试题及答案(210道)
  14. matlab读取本地图片,matlab读取图片
  15. 【antdesign】表单布局和校验
  16. 广州高清卫星地图 用百度卫星地图服务器下载 含标签、道路数据叠加 可商用
  17. 请将磁盘插入‘‘U盘(F:)‘‘的解决方法
  18. airsim--client
  19. 【充电站】_世俗智慧_哲学智慧_.
  20. 王兄弟跟妹纸分享逆袭秘籍,无关风月!

热门文章

  1. 二分图最大权匹配算法KM
  2. kafka 丢弃数据_kafka 生产者和幂等
  3. c# Task.Factory.StartNew 传参数_C#/C++混合编程一二事
  4. 数据分析与挖掘-python常用数据预处理函数
  5. lpt算法c语言程序,LPT算法的性能(近似).ppt
  6. PAT ---- 1029. 旧键盘(20)
  7. POJ2528 线段树+离散化+hash(成段更新)
  8. ZooKeeper ZAB协议:崩溃恢复、消息广播
  9. C++ 特殊类设计:只能在堆、栈上创建的类、无法继承的类、无法拷贝的类、只能创建一个对象的类
  10. 第41讲:Scrapy框架的介绍