日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

单调栈结构

發(fā)布時(shí)間:2025/4/5 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单调栈结构 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目:給定一個(gè)不含重復(fù)值的數(shù)組,找到每一個(gè)i位置左邊和右邊離i位置最近且值比arr[i]小的位置。返回所有位置相應(yīng)信息

舉例:

arr = {3,4,1,5,6,2,7}

返回?cái)?shù)組:{{-1,2},{0,2},{-1,-1},{2,5},{3,5},{2,-1},{5,-1}}

進(jìn)階問題:給定一個(gè)可能含有重復(fù)值的數(shù)組arr,找到每一個(gè)i位置左邊和右邊離i位置最近且值比arr[i]小的位置。返回所有位置相應(yīng)信息

要求:如果arr長(zhǎng)度為N,實(shí)現(xiàn)原問題和進(jìn)階問題的解法,時(shí)間復(fù)雜度都達(dá)到O(N)

思路:準(zhǔn)備一個(gè)棧,標(biāo)記為stack, 棧中放的元素是數(shù)組的位置,開始時(shí)stack為空。

如果找到每一個(gè)i位置左邊和右邊離i位置最近且值比arr[i]小的位置,那么需要讓stack從棧頂?shù)綏5椎奈恢盟淼闹凳菄?yán)格遞減的;

如果找到每一個(gè)位置左邊和右邊離i位置最近且值比arr[i]大的位置,那么需要讓stack從棧頂?shù)綏5椎奈恢盟淼闹凳菄?yán)格遞增的

def getNearNorepeat(L):res = [[0,0]]*len(L)stack = []for i in range(len(L)):while len(stack)!=0 and L[stack[-1]] > L[i]:popIndex = stack.pop()if len(stack) == 0:lessLeftIndex = -1else:lessLeftIndex = ires[popIndex][0] = lessLeftIndexres[popIndex][1] = istack.push(i)while len(stack)!=0:popIndex = stack.pop()if len(stack) == 0:lessLeftIndex = -1else:lessLeftIndex = stack[-1]res[popIndex][0] = lessLeftIndexres[popIndex][1] = -1return res def getNearLess(L):res = [[0,0]] * len(L)stack = []for i in range(len(L)):while len(stack)!=0 and L[stack[-1][0]] > L[i]:popIndex = stack.pop()if len(stack)==0:leftLessIndex = -1else:leftLessIndex = stack[-1][len(stack[-1])-1]for index in popIndex:res[index][0] = leftLessIndexres[index][1] = iif len(stack)!=0 and L[stack[-1][0]] == L[i]:stack[-1].append(i)else:list_ = []list_.append(i)stack.push(list_)while len(stack)!=0:popIndex = stack.pop()if len(stack) == 0:leftLessIndex = -1else:leftLessIndex = stack[-1][len(stack[-1])-1]for index in popIndex:res[index][0] = leftLessIndexres[index][1] = -1return res

整個(gè)過程中,進(jìn)棧一次,出棧一次,所以整個(gè)流程時(shí)間復(fù)雜度為O(N)

總結(jié)

以上是生活随笔為你收集整理的单调栈结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。