稀碎从零算法笔记Day52-LeetCode:从双倍数组中还原原数组

ops/2024/11/14 11:53:31/

题型:数组、贪心

链接:2007. 从双倍数组中还原原数组 - 力扣(LeetCode)

来源:LeetCode

题目描述

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

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

题目样例

代码

测试用例

测试结果

测试结果

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

已解答

中等

相关标签

相关企业

提示

一个整数数组 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

题目思路

让返回没有被X2后的数组 那数组的size必然是偶数

为了便于操作 可以先将数组排序,然后用一个多重集合记录【X2会得到的数组】——比如遍历到了a[i] 那就将 2*a[i]插入到集合中。当遍历到2*a[i]就将其从集合中减少一次。

最终如果集合不为空,说明不能构成双倍数组,就可以return {};

C++代码

class Solution {
public:vector<int> findOriginalArray(vector<int>& changed) {// size的个数一定是偶数int size = changed.size();if(size % 2 == 1)return {};// 创一个hash 存x2的值sort(changed.begin(),changed.end());unordered_multiset<int> hash;// 插入元素用insert// hash.insert(changed[0]);vector<int> ans;for(int x : changed){auto temp = hash.find(x);if(temp == hash.end()){hash.insert(x * 2);ans.push_back(x);}// 如果x在hash中出现过,说明他是某个数的2倍elsehash.erase(temp);}// for(int temp : ans)//     cout<<temp<<" ";vector<int> temp;// 三目运算符不能放{}return hash.empty() ? ans : temp;}
};

结算页面


http://www.ppmy.cn/ops/14897.html

相关文章

[C++]11版本新特性1:initialize list、auto、decltype

前言 本文用来记录一下cpp11版本新加入的一些特性&#xff0c;包括lambda、左右值引用、移动拷贝、移动构造 统一的列表初始化 {}初始化 cpp98 其实在98版本中就加入了{}初始化的方法&#xff0c;但只能用于初始化数组或者结构体的元素&#xff0c;需要添加 struct Point…

常用渗透测试checklist

该渗透测试checklist包含以下几个模块&#xff1a; 测试大类、测试项、威胁等级、漏洞描述、修复方案 一、认证与授权类 1.密码明文传输 威胁等级&#xff1a;低危 漏洞描述&#xff1a;密码明文传输一般存在于web网站登录页面&#xff0c;用户名或者密码采用了明文传输&am…

linux驱动-CCF-4 常见困惑

问题&#xff1a;设备树配置频率的问题 ”fixed-clock“ 节点 包含clock-frequency 属性,用于配置 时钟controller 的频率 注意区分assigned-clock-rate static struct clk *_of_fixed_clk_setup(struct device_node *node) { struct clk *clk; const char *clk_name …

二分答案算法

基本概念 将最值问题转换为判定 与二分查找的区别 二分查找&#xff1a;在一个已知的有序数据集上进行二分地查找 二分答案&#xff1a;答案有一个区间&#xff0c;在这个区间中二分&#xff0c;直到找到最优答案 如何判断一个题是不是用二分答案做的 1、答案在一个区间内…

C语言 | Leetcode C语言题解之第48题旋转图像

题目&#xff1a; 题解&#xff1a; void swap(int* a, int* b) {int t *a;*a *b, *b t; }void rotate(int** matrix, int matrixSize, int* matrixColSize) {// 水平翻转for (int i 0; i < matrixSize / 2; i) {for (int j 0; j < matrixSize; j) {swap(&matr…

clickhouse数据去重函数介绍(count distinct)

非精确去重函数&#xff1a;uniq、uniqHLL12、uniqCombined 精确去重函数&#xff1a;uniqExact、groupBitmap 测试数据量&#xff1a;2000w 结论&#xff1a; 1.整形值精确去重场景&#xff0c;groupBitmap 比 uniqExact至少快 2x 2.groupBitmap仅支持无符号整形值去重&#x…

【Redis(8)】Spring Boot整合Redis和Guava,解决缓存穿透、缓存击穿、缓存雪崩等缓存问题

在缓存技术的挑战及设计方案我们介绍了使用缓存技术可能会遇到的一些问题&#xff0c;那么如何解决这些问题呢&#xff1f; 在构建缓存系统时&#xff0c;Spring Boot和Redis的结合提供了强大的支持&#xff0c;而Guava的LoadingCache则为缓存管理带来了便捷的解决方案。下面我…

每周一算法:多起点最短路

题目描述 有一天&#xff0c;琪琪想乘坐公交车去拜访她的一位朋友。由于琪琪非常容易晕车&#xff0c;所以她想尽快到达朋友家。 现在给定你一张城市交通路线图&#xff0c;上面包含城市的公交站台以及公交线路的具体分布。 已知城市中共包含 n n n个车站&#xff08;编号 …