包含列表中所有元素的递增序列的最少数量

赫策

假设您有以下列表

a_list = [1, 2, 3, 4, 8, 7, 6]

我们想要列表的任一侧找到包含列表中所有元素最小递增序列数

对于上面的示例,我们将得到

顺序= [[1,2,3,4,8],[6,7]]

给出2答案这是因为我们可以形成从左到右依次为[1,2,3,4,8]的递增序列。我们还可以从右到左形成一个递增的序列,如[6,7]。

我考虑过创建两个列表,这些列表给出了列表的所有递增顺序以及列表的反向顺序,因此

left_to_right = [[1,2,3,4,8],[7], [6]]
right_to_left = [[6,7,8], [4], [3], [2], [1]]

但我不确定从那里去哪里。有什么想法吗?

尼尔

编辑:原来下面是不必要的复杂。“从左边开始”增加意味着减少。因此,只需遍历列表一次,使用布尔标志跟踪递增和递减的序列,使它们尽可能长,然后在最后计数。这应该工作。未经测试。

increasing = None
current_item = _list[0]
all_sequences = []
current_sequence = [_list[0]]

for item in _list[1:]:
    if increasing is None:
        increasing = item > current_sequence[-1]
        current_sequence.append(item)

    elif (item > current_item and increasing) or (item < current_item and not increasing):
        current_sequence.append(item)

    elif (item > current_item and not increasing) or (item < current_item and increasing):
        all_sequences.append(current_sequence)
        current_sequence = [item]
        increasing = None
    
    current_item = item
all_sequences.append(current_sequence)
result = len(all_sequences)
        



    

原始答案:这是一些想法

首先,我假设您的函数将始终使序列尽可能长。所以你得到这个:

left_to_right = [[1,2,3,4,8],[7], [6]]

而不是例如:

left_to_right = [[1,2],[3],[4,8],[7], [6]]

(从技术上讲,这也是递增序列的列表)。

您的下一项工作是确保您获得列表中的所有数字。因此,您必须选择一些递增的序列。您选择的序列越长,在不增加太多序列的情况下获得“消耗”的数字就越多。举个例子:

left_to_right = [[1,2,3,4,8],[7], [6]]
right_to_left = [[6,7,8], [4], [3], [2], [1]]

将两个列表结合在一起:

all = left_to_right + right_to_left

现在找到最长的序列:

longest = max(all, key=lambda x:len(x))

那会给你

[1,2,3,4,8]

现在重复,获取下一个最长的序列,继续进行直到捕获到列表中的所有数字。那会给你:

[[1,2,3,4,8], [6,7,8]]

最后一步,检查是否重复。然后你会得到

[[1,2,3,4,8], [6,7]]

如预期的

我怀疑这应该总是给您最少的顺序。但是,如果有重复,我可能是错的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何删除包含列表中所有元素的嵌套列表?

来自分类Dev

PHP:数组中所有元素的数量

来自分类Dev

如何获得具有相同序列号的表中所有元素的列表?

来自分类Dev

Python列表中所有元素的类型

来自分类Dev

覆盖图中所有节点所需的最少摄像机数量

来自分类Dev

如何获得具有最少数量的硬链接的文件?

来自分类Dev

返回包含int列表中所有ID的列表

来自分类Dev

返回列表中所有连续子序列的函数

来自分类Dev

如何使用最少数量的命令将所有 .txt 文件从所有子目录复制到一个目录?

来自分类Dev

用最少数量的交换对序列进行重新排序,以满足部分订单约束

来自分类Dev

就地替换python列表中所有出现的元素

来自分类Dev

比较列表中所有相邻元素的Python方法

来自分类Dev

HTML文档中所有元素名称的列表-beautifulsoup

来自分类Dev

获取列表中所有相邻元素的元组

来自分类Dev

获取jQuery中所有选定元素的列表

来自分类Dev

HTML文档中所有元素名称的列表-beautifulsoup

来自分类Dev

将一系列元素分解为最少数量的回文

来自分类Dev

获得最少数量的子词

来自分类Dev

添加最少数量的字符以形成回文

来自分类Dev

Java的:创建包含列表有道中所有未在相交基于特定的属性,从给定的两个列表元素?

来自分类Dev

背包任务中所有组合的数量

来自分类Dev

在给定的时间段内,线程执行的指令数是否有最少数量?

来自分类Dev

所有最长的递增子序列数

来自分类Dev

创建所有递增值序列

来自分类Dev

创建另一个列表中所有可能嵌套序列的列表

来自分类Dev

使用AngularJs从PagedList(Web API)获取集合中所有元素的数量

来自分类Dev

如何访问有序列表的所有元素

来自分类Dev

如何拼合列表以返回包含所有元素的新列表?

来自分类Dev

有序列表无法正确递增

Related 相关文章

  1. 1

    如何删除包含列表中所有元素的嵌套列表?

  2. 2

    PHP:数组中所有元素的数量

  3. 3

    如何获得具有相同序列号的表中所有元素的列表?

  4. 4

    Python列表中所有元素的类型

  5. 5

    覆盖图中所有节点所需的最少摄像机数量

  6. 6

    如何获得具有最少数量的硬链接的文件?

  7. 7

    返回包含int列表中所有ID的列表

  8. 8

    返回列表中所有连续子序列的函数

  9. 9

    如何使用最少数量的命令将所有 .txt 文件从所有子目录复制到一个目录?

  10. 10

    用最少数量的交换对序列进行重新排序,以满足部分订单约束

  11. 11

    就地替换python列表中所有出现的元素

  12. 12

    比较列表中所有相邻元素的Python方法

  13. 13

    HTML文档中所有元素名称的列表-beautifulsoup

  14. 14

    获取列表中所有相邻元素的元组

  15. 15

    获取jQuery中所有选定元素的列表

  16. 16

    HTML文档中所有元素名称的列表-beautifulsoup

  17. 17

    将一系列元素分解为最少数量的回文

  18. 18

    获得最少数量的子词

  19. 19

    添加最少数量的字符以形成回文

  20. 20

    Java的:创建包含列表有道中所有未在相交基于特定的属性,从给定的两个列表元素?

  21. 21

    背包任务中所有组合的数量

  22. 22

    在给定的时间段内,线程执行的指令数是否有最少数量?

  23. 23

    所有最长的递增子序列数

  24. 24

    创建所有递增值序列

  25. 25

    创建另一个列表中所有可能嵌套序列的列表

  26. 26

    使用AngularJs从PagedList(Web API)获取集合中所有元素的数量

  27. 27

    如何访问有序列表的所有元素

  28. 28

    如何拼合列表以返回包含所有元素的新列表?

  29. 29

    有序列表无法正确递增

热门标签

归档