亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查反轉子數組是否使數組排序-Python

檢查反轉子數組是否使數組排序-Python

肥皂起泡泡 2022-01-11 20:30:27
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 valuesfor 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]有人可以給我一些提示嗎?我是否正確解釋了原始問題?我不想用極客來回答極客。
查看完整描述

2 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

如果您只尋找要反轉的單個子字符串,則可以使用 zip() 進行連續的值對比較。首先確定第一個遞減對的位置。然后從該點開始找到第一個增加的對的位置。如果您有一個有效范圍,請反轉子字符串并測試列表是否有序。


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)。


如果要檢查多個子字符串反轉,則需要將其變為循環。


查看完整回答
反對 回復 2022-01-11
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

你可以做這樣的事情......假設連續數字是指相差一個單位的數字。您還可以更改腳本以以相反的順序容納數字,但不是精確的順序 (8 7 6) 與 (9 6 4)


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))


查看完整回答
反對 回復 2022-01-11
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號