【问题标题】:Find the subset of an array such that the elements in the subset have a common difference找到数组的子集,使得子集中的元素具有共同的差异
【发布时间】:2015-07-03 14:47:56
【问题描述】:

我在准备面试时遇到了一个问题。 给定一个整数数组作为输入。 我们找到了一个可能的子集,使得数组中的元素具有共同的差异。 例如, 考虑输入数组是 {1,3,7,10,11} 那么输出应该是 {3,7,11}。 数组中的元素总是按递增顺序排列的。 我想找到所有子集并寻找解决方案。 但是如果输入数组的大小太大,这会导致我的程序运行得更慢。 谁能帮我破解这个???

【问题讨论】:

  • 你的问题不是很好:它必须是最大的子集之一吗?因为只有第一个元素的集合始终是常数差异的子集。
  • 是的,最大的子集...

标签: arrays subset difference


【解决方案1】:

据我了解,您希望从数组中提取可能的子集,使得每两个连续数字具有越来越多的相同差值。

这是我的算法:

  1. 删除重复项。
  2. 强制升序排列。
  3. 保留一个哈希表,其中差异值作为键,列表列表作为值。
  4. 遍历数组,在哈希表中更新/添加一个键,该键等于手头的两个连续数字之间的差,并向包含这两个数字的值(列表列表)添加一个列表。
  5. 在循环之后,创建一个数组。遍历哈希表,每次向数组添加一个元素,数组本身就是一个数组:合并手头值中的所有嵌套列表。这是包含所有可能子集的数组。

这是一个可能的python实现:

from itertools import chain
def find_subsets (array):
    table = dict()
    last = array[-1]
    for num in sorted (set (array), False)[1:]:
        diff = last - num
        table[diff].append([num, last])
        last = num
    return [list(chain(v)) for k, v in table]

请尝试此代码,如果错误,请更正。匆匆写下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多