猿问

检查反转子数组是否使数组排序-Python

v=[1,2,3,4,8,7,6,9]   

在上面的列表中,反转 6,7,8 将给出连续值。如果我理解正确,我认为这就是这个问题想要找到的内容https://www.geeksforgeeks.org/check-reversing-sub-array-make-array-sorted/


我的方法是


查找反转值列表


找出哪些列表包含连续数字。


我无法让第 2 步工作。这是我的代码:


v=[1,2,3,4,8,7,6,9]


ls=[]

# This part below will generate many lists and 1 of them will be [6,7,8]

for i in range (0,len(v)-1):

    for j in range(i+1, len(v)):

        r= v[i:j][::-1]

        ls.append(r)# this append lists not values


#Below code will check to see if any list has consecutive values

for item in ls:

    for i in range(len(item) - 1):

        if item[i] + 1 == item[i + 1]:

            if i == 0 or item[i] - 1 != item[i - 1]:

                print(item)

当我期待 [6,7,8] 时,我得到以下信息


[6, 7, 8, 4, 3]

[7, 8, 4]

[6, 7, 8, 4]

[7, 8]

[6, 7, 8]

有人可以给我一些提示吗?我是否正确解释了原始问题?我不想用极客来回答极客。


肥皂起泡泡
浏览 171回答 2
2回答

HUH函数

如果您只寻找要反转的单个子字符串,则可以使用 zip() 进行连续的值对比较。首先确定第一个递减对的位置。然后从该点开始找到第一个增加的对的位置。如果您有一个有效范围,请反转子字符串并测试列表是否有序。a = [1,2,3,4,8,7,6,9]start&nbsp; &nbsp; &nbsp; &nbsp; = next( (i for i,(v0,v1) in enumerate(zip(a,a[1:])) if v0>v1),len(a))end&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = next( (i+start+1 for i,(v0,v1) in enumerate(zip(a[start:],a[start+1:])) if v0<v1),len(a))if end > start : a[start:end] = a[start:end][::-1]canSort&nbsp; &nbsp; &nbsp; = end > start+1 and not any( a>b for a,b in zip(a,a[1:])) # True这将在 O(n) 时间内处理,而不是嵌套循环的 O(n^2)。如果要检查多个子字符串反转,则需要将其变为循环。

qq_花开花谢_0

你可以做这样的事情......假设连续数字是指相差一个单位的数字。您还可以更改脚本以以相反的顺序容纳数字,但不是精确的顺序 (8 7 6) 与 (9 6 4)v=[1,2,3,4,8,7,6,9]l = []last_item =-99for i in range(1,len(v)-1):&nbsp; &nbsp; if&nbsp; v[i]&nbsp; == v[i + 1] + 1:&nbsp; &nbsp; &nbsp; &nbsp; l.append(v[i])&nbsp; &nbsp; &nbsp; &nbsp; last_item = v[i]&nbsp; &nbsp; elif v[i] == last_item - 1:&nbsp; &nbsp; &nbsp; &nbsp; l.append(v[i])&nbsp; &nbsp; &nbsp; &nbsp; last_item = v[i]print(sorted(l))
随时随地看视频慕课网APP

相关分类

Python
我要回答