代码之家  ›  专栏  ›  技术社区  ›  Chris W.

通过删除“中间”项从数组中删除项的算法?

  •  0
  • Chris W.  · 技术社区  · 6 年前

    n ,其中所需物品的最大数量为 m m < n ,其中列表中最有价值/最有用的项目是距离其他项目最远的项目。如何从列表中删除项目以将列表大小减小到 .

    • [ a, b, c, d, e ] 带着一个 m == 2 [ a, e]

    • e、 例如 [甲,乙,丙,丁,戊] 带着一个 m == 3 ,我们会得到 [ a, c, e ]

    • e、 例如 带着一个 m == 4 [ a, b, c, e ] [ a, c, d, e ] . (两个答案中的任何一个都是有效的;但只应返回一个,最好是确定性地返回。)

    注:我概括了一个实际问题,即从视频中选择具有代表性的帧。代码将用python编写。

    2 回复  |  直到 6 年前
        1
  •  2
  •   user2357112    6 年前

    (n-1)/(m-1) ,这里有“about”,因为我们不能在非整数上着陆。

    def representatives(l, m):
        num, den = len(l)-1, m-1
        return [l[i * num // den] for i in range(m)]
    

    i 从元素中获取结果的 i*(n-1)//(m-1) 输入,其中 // 是楼层划分。

        2
  •  2
  •   Turksarama    6 年前

    c :

    sparse_list = c[::len(c)//(m-1)]
    

    这将返回步长为的列表 len(c)//(m-1)

    例如。:

    c = list(range(50))
    m = 5
    c[::len(c)//(m-1)] # [0, 12, 24, 36, 48]
    

    它不太完美,因为它适合精确的间距,但它快速而简单(而且性能很好)。