一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 2 加入数组中,然后将所有元素 随机打乱 。

给你一个数组 changed ,如果 change 是 双倍 数组,那么请你返回 original数组,否则请返回空数组。original 的元素可以以 任意 顺序返回。

示例 1:

输入:changed = [1,3,4,2,6,8]
输出:[1,3,4]
解释:一个可能的 original 数组为 [1,3,4] :
- 将 1 乘以 2 ,得到 1 * 2 = 2 。
- 将 3 乘以 2 ,得到 3 * 2 = 6 。
- 将 4 乘以 2 ,得到 4 * 2 = 8 。
其他可能的原数组方案为 [4,3,1] 或者 [3,1,4] 。

示例 2:

输入:changed = [6,3,0,1]
输出:[]
解释:changed 不是一个双倍数组。

示例 3:

输入:changed = [1]
输出:[]
解释:changed 不是一个双倍数组。

提示:

  • 1 <= changed.length <= 105
  • 0 <= changed[i] <= 105

C++

class Solution {
public:vector<int> findOriginalArray(vector<int>& changed) {int n=changed.size();unordered_map<int,int> mp;for(int i=0;i<n;i++) {mp[changed[i]]++;}sort(changed.begin(),changed.end());vector<int> res;for(int i=0;i<n;i++) {if(mp[changed[i]]>0) {mp[changed[i]]--;if(mp[changed[i]*2]>0) {res.push_back(changed[i]);mp[changed[i]*2]--;} else {return vector<int>();}}}return res;}
};

java

class Solution {public int[] findOriginalArray(int[] changed) {ArrayList<Integer> res = new ArrayList<>();Map<Integer, Integer> mp = new HashMap<>();int n = changed.length;Arrays.sort(changed);for (int i = 0; i < n; i++) {mp.put(changed[i], mp.getOrDefault(changed[i], 0) + 1);}for (int i = 0; i < n; i++) {if (mp.get(changed[i]) > 0) {mp.put(changed[i], mp.get(changed[i]) - 1);if (mp.containsKey(changed[i] * 2) && mp.get(changed[i] * 2) > 0) {mp.put(changed[i] * 2, mp.get(changed[i] * 2) - 1);res.add(changed[i]);} else {return new int[0];}}}int[] ans = new int[n / 2];for (int i = 0; i < ans.length; i++) {ans[i] = res.get(i);}return ans;}
}

python

class Solution:def findOriginalArray(self, changed: List[int]) -> List[int]:n = len(changed)ct = Counter()changed.sort()res = []for i in range(n):ct[changed[i]] += 1for i in range(n):if ct[changed[i]] > 0:ct[changed[i]] -= 1if ct[changed[i] * 2] > 0:ct[changed[i] * 2] -= 1res.append(changed[i])else:return []return res

leetcode 2007. 从双倍数组中还原原数组(C++、java、python)相关推荐

  1. LeetCode 2007. 从双倍数组中还原原数组(map)

    文章目录 1. 题目 2. 解题 1. 题目 一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 2 加入数组中,然后将所 ...

  2. 从双倍数组中还原原数组

    一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 2 加入数组中,然后将所有元素 随机打乱 . 给你一个数组 chang ...

  3. leetcode-从双倍数组中还原原数组

    一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 2 加入数组中,然后将所有元素 随机打乱 . 给你一个数组 chang ...

  4. 2122 还原原数组(枚举,双指针)

    1. 问题描述: Alice 有一个下标从 0 开始的数组 arr ,由 n 个正整数组成.她会选择一个任意的正整数 k 并按下述方式创建两个下标从 0 开始的新整数数组 lower 和 higher ...

  5. 返回一个整数数组中最大子数组的和---环形数组

    一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j- ...

  6. 求二维数组中最大子数组的和

    任国庆  张博 之前我们讨论了在一维数组中求最大子数组的和,在此基础上我们开始讨论二维数组的最大子数组. 求二维数组的最大子数组思想是建立在以为数组.首先将数组的第一列看成一个一维数组,找到该列的最大 ...

  7. 整数数组中最大子数组求和02

    设计思路: 在"整数数组中最大子数组求和01"的基础上完成本次实验. 本次实验的关键在于如何判断结束. 经设计,程序结束条件有两种:1.截取部分有重复:2.循环完整两次. 满足其中 ...

  8. numpy ndarray.tostring()(在数组中构造包含原始数据字节的Python字节)(tobytes()函数的兼容性别名)

    from numpy\core\multiarray def tostring(self, order='C'): # real signature unknown; restored from __ ...

  9. 课堂练习:返回一个二维数组中最大子数组的和

    1.题目: 返回一个二维数组中最大子数组的和. 2.要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子 ...

最新文章

  1. 基于opencv实现模块化图像处理管道
  2. shujufenxi : baichi xiangzhuanqian
  3. wxWidgets:wxPickerBase类用法
  4. VTK使用矢量数据弯曲几何体
  5. Jenkins学习二:Jenkins安装与配置
  6. Python下socket通信
  7. ## CSP (C语言)201712-2 游戏
  8. “为了拿下 Offer,我在技术面试时迎合面试官,给了错误答案!”
  9. 程序员:你为什么要离职?
  10. TubeMQ 万亿级分布式消息中间件
  11. 多网卡配置同一网段IP情况解析
  12. 20200707每日一句
  13. 计算程序运行时间,并将毫秒换算成人看得懂的文字,展示形式为时分秒
  14. gtx1050ti安装win10和ubuntu16.04双系统
  15. 将Visual Leak Detector集成至Visual Studio 2019
  16. hal系统命令 android,动态可用的 HAL  |  Android 开源项目  |  Android Open Source Project...
  17. 迁移学习(Transfer Learning)-- 概念理解
  18. SpringBoot项目中的 ClassPath路径指的是哪个路径
  19. JZOJ5498. 【清华集训2017模拟12.10】大佬的难题
  20. 氢动力赛车是否是清洁交通的关键?

热门文章

  1. 用python爬取笔趣阁小说并分章节保存到本地
  2. 【听】告別玻璃心的十三件事,走出舒适圈
  3. 橄榄油可以用来炒菜吗
  4. 安卓虚拟键盘_Android自动化测试13--安卓仿真器/模拟器
  5. 基于STM32F767的FreeRTOS的移植
  6. 基于易语言写QQ音乐播放器
  7. cisco 内存利用率oid_交换机CPU、内存OID获取 | 聂扬帆博客
  8. 贪玩蓝月服务器维护需多少时间,贪玩蓝月一般多久合区 | 手游网游页游攻略大全...
  9. 数据安全的下一个风口:SASE云服务平台
  10. 关于金额转化为大写的小程序