首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查是否反转子数组使数组排序-Python

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

Stack Overflow用户
提问于 2019-04-16 17:31:49
回答 2查看 258关注 0票数 0
代码语言:javascript
复制
v=[1,2,3,4,8,7,6,9]   

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

我的方法是

  1. 查找反向值列表
  2. 查找这些列表中的哪个包含连续数字。

我不能让step2工作。这是我的代码:

代码语言:javascript
复制
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岁时,我得到了以下信息

代码语言:javascript
复制
[6, 7, 8, 4, 3]
[7, 8, 4]
[6, 7, 8, 4]
[7, 8]
[6, 7, 8]

有人能给我点提示吗?我正确地解释了原来的问题吗?我不想用极客来回答怪人。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-16 21:10:06

如果您只是在寻找要反转的单个子字符串,则可以使用zip()进行连续的值对比较。首先确定第一递减对的位置。然后从这一点找出第一个递增对的位置。如果有有效范围,则反转子字符串,并测试列表是否符合顺序。

代码语言:javascript
复制
a = [1,2,3,4,8,7,6,9]

start        = next( (i for i,(v0,v1) in enumerate(zip(a,a[1:])) if v0>v1),len(a))
end          = 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      = end > start+1 and not any( a>b for a,b in zip(a,a[1:])) # True

这将在O(n)时间内处理,与嵌套循环的O(n^2)相反。

如果要检查多个子字符串反转,则需要将其设置为一个循环。

票数 0
EN

Stack Overflow用户

发布于 2019-04-16 17:55:15

你可以这样做..。假设连续的数字是指一个单位不同的数字。您也可以更改脚本,以适应数字的反向顺序,但不精确命令(8 7 6) vs (9 6 4)。

代码语言:javascript
复制
v=[1,2,3,4,8,7,6,9]

l = []
last_item =-99
for i in range(1,len(v)-1):
    if  v[i]  == v[i + 1] + 1:
        l.append(v[i])
        last_item = v[i]
    elif v[i] == last_item - 1:
        l.append(v[i])
        last_item = v[i]
print(sorted(l))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55713681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档