加载中...
2007-从双倍数组中还原原数组(Find Original Array From Doubled Array)
发表于:2021-12-03 | 分类: 中等
字数统计: 602 | 阅读时长: 2分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/find-original-array-from-doubled-array

英文原文

An integer array original is transformed into a doubled array changed by appending twice the value of every element in original, and then randomly shuffling the resulting array.

Given an array changed, return original if changed is a doubled array. If changed is not a doubled array, return an empty array. The elements in original may be returned in any order.

 

Example 1:

Input: changed = [1,3,4,2,6,8]
Output: [1,3,4]
Explanation: One possible original array could be [1,3,4]:
- Twice the value of 1 is 1 * 2 = 2.
- Twice the value of 3 is 3 * 2 = 6.
- Twice the value of 4 is 4 * 2 = 8.
Other original arrays could be [4,3,1] or [3,1,4].

Example 2:

Input: changed = [6,3,0,1]
Output: []
Explanation: changed is not a doubled array.

Example 3:

Input: changed = [1]
Output: []
Explanation: changed is not a doubled array.

 

Constraints:

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

中文题目

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

通过代码

高赞题解

func findOriginalArray(changed []int) (original []int) {
	sort.Ints(changed)
	cnt := map[int]int{}
	for _, v := range changed {
		if cnt[v] == 0 { // v 不是双倍后的元素
			cnt[v*2]++ // 标记一个双倍元素
			original = append(original, v)
		} else {
			cnt[v]-- // 清除一个标记
			if cnt[v] == 0 {
				delete(cnt, v)
			}
		}
	}
	// 只有当所有双倍标记都被清除掉时,才能说明 changed 是一个双倍数组
	if len(cnt) == 0 {
		return
	}
	return nil
}

统计信息

通过次数 提交次数 AC比率
3341 10564 31.6%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
1987-不同的好子序列数目(Number of Unique Good Subsequences)
下一篇:
2006-差的绝对值为 K 的数对数目(Count Number of Pairs With Absolute Difference K)
本文目录
本文目录