跳到主要内容

2122.还原原数组

链接:2122.还原原数组
难度:Hard
标签:数组、哈希表、枚举、排序
简介:给你一个由 2n 个整数组成的整数数组 nums ,其中 恰好 n 个整数出现在 lower ,剩下的出现在 higher ,还原并返回 原数组 arr 。如果出现答案不唯一的情况,返回 任一 有效数组。

题解 1 - cpp

  • 编辑时间:2021-12-31
  • 执行用时:880ms
  • 内存消耗:285.8MB
  • 编程语言:cpp
  • 解法介绍:存入 map 分别统计。
class Solution {
public:
int get_k(unordered_map<int, int> m, vector<int>& nums, int k,
vector<int>& ans) {
for (int i = 0; i < nums.size(); i++) {
int low = nums[i];
if (m.count(low) == 0 || m[low] <= 0) continue;
int high = low + 2 * k;
if (m.count(high) == 0 || m[high] <= 0) return 0;
m[low]--;
m[high]--;
ans.push_back(low + k);
}
return k;
}
vector<int> recoverArray(vector<int>& nums) {
unordered_map<int, int> m;
for (auto& num : nums) m[num]++;
sort(nums.begin(), nums.end());
vector<int> ans;
int v1 = nums[0], v2, k = 0;
for (int i = 1; i < nums.size() && k == 0; i++) {
ans.clear();
v2 = nums[i];
if ((v2 - v1) & 1 || (v2 - v1) <= 1) continue;
k = get_k(m, nums, (v2 - v1) / 2, ans);
}
return ans;
}
};