繩子的長度;及找陣列的波谷分析
今日面試題:繩子的長度
一根一米長的繩子,隨機斷成三段;求最短的一段的期望長度以及最長的一段的期望長度。
================================
找陣列的波谷分析:
原題
一個陣列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:
0 | 1 | 2 | 3 | 4 | 5 | 6 |
9 | 7 | 7 | 2 | 1 | 3 | 7 |
left | mid | right |
A[0]>A[1],A[6]>A[5],滿足題目中要求陣列的條件。滿足這樣的條件,陣列中一定是存在波谷的。假設不存在波谷,則A[0]
上表中的mid=3,A[mid]=2。A[mid-1]
0 | 1 | 2 | 3 | 4 | 5 | 6 |
9 | 7 | 7 | 2 | 1 | 3 | 7 |
left | mid | right |
此時,mid滿足波谷的條件,找到波谷。
總結上面的思路,找到陣列的mid元素,mid有幾種情況:
如果A[mid-1]>=A[mid] && A[mid+1]>=A[mid],找到波谷;
如果A[mid-1]<=A[mid]
如果A[mid+1]<=A[mid]
如果A[mid-1]
進一步分析
如果這個題目中,沒有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)的。
本文來自微信:待字閨中,2013-07-23釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 找陣列的波谷;及巧妙排序的分析陣列排序
- 千王之王;及繩子的長度分析
- 203. 長度最小的子陣列陣列
- 每日一練(45):長度最小的子陣列陣列
- 字元陣列的長度字元陣列
- 3254. 長度為 K 的子陣列的能量值 I陣列
- 找數字;及最長等差數列分析
- 程式碼隨想錄陣列二刷:長度最小的子陣列(滑動視窗)陣列
- LeetCode-209-長度最小的子陣列LeetCode陣列
- 【LeetCode】209. 長度最小的子陣列LeetCode陣列
- 1588 所有奇數長度子陣列的和(字首和)陣列
- leetcode_209. 長度最小的子陣列LeetCode陣列
- Java 定義長度為 0 的陣列 / 空陣列Java陣列
- 最長等差數列;及子序列分析
- 977.有序陣列的平方 ,209.長度最小的子陣列 ,59.螺旋矩陣II陣列矩陣
- C++獲取陣列的長度C++陣列
- Javascript如何改變陣列的長度?JavaScript陣列
- C++陣列長度C++陣列
- POJ 2217-Secretary(字尾陣列+高度陣列-最大公共子串長度)陣列
- C語言求其字元陣列的長度C語言字元陣列
- Q11 LeetCode209 長度最小的子陣列LeetCode陣列
- 978 最長湍流子陣列陣列
- Day2| 977.有序陣列的平方 ,209.長度最小的子陣列 ,59.螺旋矩陣II陣列矩陣
- Day2 |977.有序陣列的平方& 209.長度最小的子陣列&59.螺旋矩陣II陣列矩陣
- Leetcode 陣列中和為給定值的最長子陣列LeetCode陣列
- 尋找陣列的中心索引陣列索引
- 演算法陣列中降序數列的最大長度演算法陣列
- javascript如何獲取陣列的長度和遍歷陣列的每一項JavaScript陣列
- HDU 4622 Reincarnation( 任意區間子串的長度, 字尾陣列+RMQ)陣列MQ
- c語言中計算陣列長度的方法C語言陣列
- 結構體最後的零長度陣列結構體陣列
- C語言如何計算陣列的長度C語言陣列
- 用 GetLength(int dimension) 獲取陣列指定維度的長度。陣列
- 重排陣列;及消失的數字分析陣列
- 陣列統計;及樹的高度分析陣列
- POJ 2774-Long Long Message(字尾陣列+高度陣列-最大公共子串長度)陣列
- c語言獲取陣列長度的函式C語言陣列函式
- C語言中如何求一個陣列的長度C語言陣列