我想解決的問題如下:我想找到一個給定的數組中的數字的最大跨度給定數組A包含正整數和負整數返回最大(A [j] - A [ I]),使得1 < = I <Ĵ< = n,並且我想出了針對此問題以下nlogn時間算法 - :如何找到給定數組的最大跨度?
- 找到陣列的n階統計量的索引讓它成爲「i」
- 找到數組的第一條統計量的索引讓它成爲「j」
- 如果i> j,則返回差異,因爲我們發現差異在數組的最大元素和最小元素之間,因此只是終止返回差異。
- 如果j> i,然後將數組分成兩半,並通過調用此函數在兩半中找到最大跨度,即A [1 .... i]和A [i + 1 ...... n]算法是遞歸的,情況是當算法找到這樣的一對i,j它返回那些對之間的差別,否則它保持遞歸併最終終止。
- 回報最大{子陣列1的max_span,subarray2的max_span}
該算法是O(nlogn),但我不知道,如果它的正確與否。
所以,如果你計算「跨度」,你只是想計算該數組中的最大值和最小值之間的差異? – libik
嗯,我可能知道它,所以它是最大值和最小值,但最小值必須總是「在左邊」 – libik
是最小值總是在左邊A [j] - A [i] 1 <= i < j <= n – AnkitSablok