陣列的波谷

2021-09-26 22:34:23 字數 816 閱讀 4906

###找陣列的波谷

####原題

乙個陣列a[1…n],滿足a[1]>=a[2], a[n] >= a[n-1]。a[i]被成為波谷,意味著:a[i-1] >= a[i] <= a[i+1]。請給出乙個演算法,找到陣列中的乙個波谷。o(n)的方法,是很直接,有更快的方法麼?

####分析

這個題目遍歷一遍陣列,顯然就可以找到全部的波谷。時間複雜度o(n),空間複雜度是o(1)。但是如果我們只需要找到乙個波谷,是否有更快的方法呢?更快的方法o(1)是不可能的,那只有o(logn),自然就想到二分查詢。這個題目如果進行二分呢?我們看下面的陣列a:01

2345

6977

2137

left

midright

a[0]>a[1],a[6]>a[5],滿足題目中要求陣列的條件。滿足這樣的條件,陣列中一定是存在波谷的。假設不存在波谷,則a[0]

上表中的mid=3,a[mid]=2。a[mid-1]012

3456

9772

137left

midright

此時,mid滿足波谷的條件,找到波谷。

總結上面的思路,找到陣列的mid元素,mid有幾種情況:

####進一步分析

如果這個題目中,沒有a[1]>=a[2]以及a[n]>=a[n-1]的約束,還能夠以o(logn)的時間複雜度完成麼?關鍵點就在於,中間的元素與其相鄰的元素進行大小比較的時候,還能否選擇一邊繼續進行查詢。當a[mid-1]<=a[mid]時,可能是a[1]t(n)=2t(n/2)+1

根據主定理,解得,時間複雜度為o(n).此時,是不存在o(logn)的。

波峰波谷陣列

如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為擺動序列。第乙個差 如果存在的話 可能是正數或負數。少於兩個元素的序列也是擺動序列。例如,1,7,4,9,2,5 是乙個擺動序列,因為差值 6,3,5,7,3 是正負交替出現的。相反,1,4,7,2,5 和 1,7,4,5,5 不是擺動序...

尋找波峰波谷

尋找波峰波谷也就是求極值 極值 data是你的資料,find diff sign diff data 2 1 找到極大值的位置 find diff sign diff data 2 1 找到極小值的位置 data find diff sign diff data 2 1 和 data find di...

波谷 感慨萬千

女人,要懂得自我公升值,不然一定貶值 辛苦不苦,心苦才苦 愛情真是需要經營的 人生沒有了目標,比船沒有航行目標要無趣多了 大學果然是象牙塔,社會果然是大染缸 有些事,除了自己,沒人能幫得上忙 不要試圖偏著腦袋,因為沒有肩膀可以靠的 心真是有涼和碎的狀態的 當沒有退路的時候,就只剩下向前衝了 我也想積...