题目描述:

给定一个长度为偶数的整数数组 arr,只有对 arr 进行重组后可以满足 “对于每个 0 <= i < len(arr) / 2,都有 arr[2 * i + 1] = 2 * arr[2 * i]” 时,返回 true;否则,返回 false。

示例 1:

输入:arr = [3,1,3,6]
输出:false
示例 2:

输入:arr = [2,1,2,6]
输出:false
示例 3:

输入:arr = [4,-2,2,-4]
输出:true
解释:可以用 [-2,-4] 和 [2,4] 这两组组成 [-2,-4,2,4] 或是 [2,4,-2,-4]

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

---------------------------------------------------------------------------------------------------------------------------------

day13:今天是一道中等题,思路挺好想的,但是就是不够简洁,也不够快,很优的方法没想到,错了一两次才搞定,要放松放松了,脑瓜子反应都慢了,看看代码:

public boolean canReorderDoubled(int[] arr) {int sum = 0, size = arr.length, num = 1;List<Integer> list = new ArrayList<>();Arrays.sort(arr);for (int i = 0; i < size; i++) {sum += arr[i];list.add(arr[i]);}if (sum % 3 != 0)return false;while (list.size() > 0){if(num >= list.size())return false;if (list.get(0) < 0) {if (list.get(num) == 0)return false;sum = list.get(0) / list.get(num);if ((sum > 2) || (sum < 0))return false;else if (sum < 2)num++;else {list.remove(num);list.remove(0);num = 1;}}else if (list.get(0) == 0){if (list.get(num) == 0){list.remove(num);list.remove(0);num = 1;}elsereturn false;}else {sum = list.get(num) / list.get(0) ;if (sum > 2)return false;else if (sum == 2){list.remove(num);list.remove(0);num = 1;}elsenum ++;}}return true;}

思路解析:

因为数组是乱的,所以先排个序,然后只需要考虑最小的值在后面有没有能匹配的值,如果后面的数已经比它二倍大了就可以不用再往后递增了,如果是负数还要考虑是否一正一副或者被除数为0,这样子算下来太浪费时间了,具体看看下面这种解析:


public boolean canReorderDoubled(int[] arr) {Map<Integer, Integer> cnt = new HashMap<Integer, Integer>();for (int x : arr) {cnt.put(x, cnt.getOrDefault(x, 0) + 1);}if (cnt.getOrDefault(0, 0) % 2 != 0) {return false;}List<Integer> vals = new ArrayList<Integer>();for (int x : cnt.keySet()) {vals.add(x);}Collections.sort(vals, (a, b) -> Math.abs(a) - Math.abs(b));for (int x : vals) {if (cnt.getOrDefault(2 * x, 0) < cnt.get(x)) { // 无法找到足够的 2x 与 x 配对return false;}cnt.put(2 * x, cnt.getOrDefault(2 * x, 0) - cnt.get(x));}return true;}

思路解析:

通过哈希表来算值,生成一个哈希表,用来存当前数组,key为数组的值,每出现一次value加1,最终hash表中的key-value就是通过数组值key来存储每个数组出现的次数,如果0出现次数为奇数,直接return,然后用一个列表,把key值也就是原数组填充起来,因为要做排序的操作,列表更方便一点,通过jdk8新特性Collections.sort排绝对值的序,最后通过循环,从最小的往上取,如果2倍key没结果或者2倍key的数比key少,直接rutern false,否则2倍key的个数-key的个数,并覆盖

《LeetCode刷题》954. 二倍数对数组(java篇)相关推荐

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

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

  2. 《LeetCode刷题》682. 棒球比赛(java篇)

    题目描述: 你现在是一场采用特殊赛制棒球比赛的记录员.这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分. 比赛开始时,记录是空白的.你会得到一个记录操作的字符串列表 ops,其中 o ...

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

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

  4. leetcode刷题日记(一)—— 数组

    因为暑期实习找得很不顺利,感觉自身最大的问题体现在刷题量偏少,操作系统,数据库基础不好,所以现在决定写博客来记录整个过程,希望能找到大厂offer,如果不能找到的话也算是为秋招做准备. 剑指offer ...

  5. LeetCode刷题实战1:在数组上遍历出花样

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 废话不多说 ...

  6. 【leetcode刷题】21.三数之和——Java版

    ⭐欢迎订阅<leetcode>专栏,每日一题,每天进步⭐ 一题二写,三数之和,题解四瞅五瞄六瞧,水平还七上八下九流,十分辣鸡. --leetcode此题热评 前言 哈喽,大家好,我是一条. ...

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

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

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

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

  9. LeetCode 954. 二倍数对数组

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

最新文章

  1. PAT(甲级)2019年秋季考试 7-2 Merging Linked Lists
  2. 【POJ】2828 Buy Tickets(线段树+特殊的技巧/splay)
  3. 递归神经网络预测股票好文章
  4. 差分约束 4416 FFF 团卧底的后宫
  5. ios 应用 开发流程。。。
  6. 安卓学习 之 数据存储(六)
  7. C#实践设计模式原则SOLID
  8. Curvilinear structure detections
  9. Silver Cow Party 图论 最短路问题
  10. 开源的魔兽世界参考架构——mangos
  11. ISI CVPR journal ranking
  12. 大白菜u启动盘安装linux,大白菜U盘启动pe装系统教程
  13. SQLyog-12.4.2版下载,SQLyog最新版下载,SQLyog官网下载,SQLyog Download
  14. python会自动释放内存吗_没白熬夜,终于把Python的内存管理机制搞明白了
  15. java 双向链表循环_(java实现)双向循环链表
  16. 用cmd命令行下载github中的工程文件
  17. 学渣的刷题之旅 leetcode刷题 67.二进制求和
  18. 年终盘点一 | 云原生的 2022 年:降本提效、全面 Serverless 化
  19. 十二月英语学习总结-希冀
  20. 小红书怎么推广引流?怎么样在小红书上引流?

热门文章

  1. elasticsearch最大节点数_记录 Elasticsearch 的 maximum shards open 问题
  2. Elasticsearch 7.10 之 Total shards per node
  3. 一个立体感的按钮样式
  4. 关于星巴克推广活动的实验测试
  5. 【汇编程序】编写一个在显示器上显示的一个笑脸字符的程序
  6. 代码主题darcula_设置IntelliJ主题和字体方法
  7. flutter图标按钮_flutter 按钮封装 带图片的按钮,带边框的按钮,纯文字的按钮
  8. 键盘对应的ASCⅡ码
  9. DWcs4右下角没有html文件,dreamweaver cs4 (dwcs4)安装图文教程
  10. 【MATLAB统计分析与应用100例】案例016:matlab读取Excel数据,进行样品系统聚类分析