leetcode 2007. 从双倍数组中还原原数组(C++、java、python)
一个整数数组 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)相关推荐
- LeetCode 2007. 从双倍数组中还原原数组(map)
文章目录 1. 题目 2. 解题 1. 题目 一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 2 加入数组中,然后将所 ...
- 从双倍数组中还原原数组
一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 2 加入数组中,然后将所有元素 随机打乱 . 给你一个数组 chang ...
- leetcode-从双倍数组中还原原数组
一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 2 加入数组中,然后将所有元素 随机打乱 . 给你一个数组 chang ...
- 2122 还原原数组(枚举,双指针)
1. 问题描述: Alice 有一个下标从 0 开始的数组 arr ,由 n 个正整数组成.她会选择一个任意的正整数 k 并按下述方式创建两个下标从 0 开始的新整数数组 lower 和 higher ...
- 返回一个整数数组中最大子数组的和---环形数组
一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]--A[j- ...
- 求二维数组中最大子数组的和
任国庆 张博 之前我们讨论了在一维数组中求最大子数组的和,在此基础上我们开始讨论二维数组的最大子数组. 求二维数组的最大子数组思想是建立在以为数组.首先将数组的第一列看成一个一维数组,找到该列的最大 ...
- 整数数组中最大子数组求和02
设计思路: 在"整数数组中最大子数组求和01"的基础上完成本次实验. 本次实验的关键在于如何判断结束. 经设计,程序结束条件有两种:1.截取部分有重复:2.循环完整两次. 满足其中 ...
- numpy ndarray.tostring()(在数组中构造包含原始数据字节的Python字节)(tobytes()函数的兼容性别名)
from numpy\core\multiarray def tostring(self, order='C'): # real signature unknown; restored from __ ...
- 课堂练习:返回一个二维数组中最大子数组的和
1.题目: 返回一个二维数组中最大子数组的和. 2.要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子 ...
最新文章
- 基于opencv实现模块化图像处理管道
- shujufenxi : baichi xiangzhuanqian
- wxWidgets:wxPickerBase类用法
- VTK使用矢量数据弯曲几何体
- Jenkins学习二:Jenkins安装与配置
- Python下socket通信
- ## CSP (C语言)201712-2 游戏
- “为了拿下 Offer,我在技术面试时迎合面试官,给了错误答案!”
- 程序员:你为什么要离职?
- TubeMQ 万亿级分布式消息中间件
- 多网卡配置同一网段IP情况解析
- 20200707每日一句
- 计算程序运行时间,并将毫秒换算成人看得懂的文字,展示形式为时分秒
- gtx1050ti安装win10和ubuntu16.04双系统
- 将Visual Leak Detector集成至Visual Studio 2019
- hal系统命令 android,动态可用的 HAL | Android 开源项目 | Android Open Source Project...
- 迁移学习(Transfer Learning)-- 概念理解
- SpringBoot项目中的 ClassPath路径指的是哪个路径
- JZOJ5498. 【清华集训2017模拟12.10】大佬的难题
- 氢动力赛车是否是清洁交通的关键?