【问题标题】:Recovering an array [duplicate]恢复数组[重复]
【发布时间】:2019-11-10 13:15:11
【问题描述】:

我最近在招聘挑战中遇到了这个问题:

给定由 2^N 个整数组成的数组 S(1

例如S = {2, 1, 0, 3} => A = {1, 2} 因为 A 的子集和是 {0, 1, 2, 1+2}

数组S中数字的顺序可以是随机的。

我该如何解决这个问题?提前致谢。

【问题讨论】:

  • 对 A 中的值有任何限制吗? 0 可以是数组的一部分。 A 的取值范围是多少?
  • 一般没有,但有 0

标签: algorithm math data-structures subset-sum


【解决方案1】:

您可以对包含子集和的数组进行排序 当你对子集和数组进行排序时 Ai = S[2^i] - 应该按排序顺序为您提供数组 A 的值。

您可以制作一个真值表来获取子集总和并追溯 假设 S 是有效输入 例如:S = { 0, 5, 3, 8, 1, 6, 4, 9 }

Sorted S = {0, 1, 3, 4, 5, 6, 8, 9} 
A = [A0, A1, A2] --- 

A0,A1,A2 -- (Binary, part of subset = 1 not part = 0 )

Index |  A0,A1,A2  | Sorted Sum  
0        0 0 0        0
1        1 0 0        1
2        0 1 0        3 
3        1 1 0        4 
4        0 0 1        5
5        1 0 1        6
6        0 1 1        8
7        1 1 1        9

From her we can reverse and find that A0 = S[2^0], A1 = S[2^1], A2 = S[2^2]

【讨论】:

  • 我试过了,但是当 A = {1,2,4} 时失败了
  • Sorted S for A = {1,2,4} Sorted S = {0, 1, 2, 3, 4, 5, 6, 7} -- 这样 A0 = 1, A1 = 2, A2 = 4 ?
  • 对不起,如果 A = {1,1,1}
猜你喜欢
  • 2014-01-06
  • 2012-12-18
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 2019-07-21
相关资源
最近更新 更多