1 5 最大間隙問題

2022-05-20 19:59:29 字數 1392 閱讀 8971

´問題描述:

最大間隙問題:給定 n 個實數 n

x , x , , x 1 2  ,求這 n 個數在實軸上相鄰 2 個數之間的最

大差值。假設對任何實數的下取整函式耗時o(1) ,設計解最大間隙問題的線性時間演算法。

´程式設計任務:

對於給定的 n 個實數 n

x , x , , x 1 2  ,程式設計計算它們的最大間隙。

´資料輸入:

輸入資料由檔名為 input.txt 的文字檔案提供。檔案的第 1 行有 1 個正整數 n。接下來

的 1 行中有 n 個實數 n

x , x , , x 1 2  。

´結果輸出:

程式執行結束時,將找到的最大間隙輸出到檔案 output.txt 中。

輸入檔案示例 輸出檔案示例

input.txt output.txt

52.3 3.1 7.5 1.5 6.3

3.2【題解】

先求出座標的最大值和最小值的差len=maxx-minx

然後把minx~maxx這整個區間分成n-1份。

這樣的話,除了minx和max在第1和第n個區間(maxx特殊處理放在第n個區間,minx會固定放在第乙個區間)

然後其餘的n-2個數字會分配在1..n-1這n-1個區間中(第n個區間只有最大的那個數字(當然多個最大的數字也無所謂))

顯然會有乙個區間是空著的!

這就說明最大的gap肯定是至少橫跨了乙個區間的!所以不用在意每個區間內部的排序順序,只要記錄下來每個區間的最大座標值和最小座標值就好了。

然後順序便利一遍這n-1個桶就行!

beautiful!

【**】

#include #include #include using namespace std;

const int n = 200000;

const double inf = 1e8;

int n;

double x[n+10];

double mi = inf,ma = -inf;

double segmax[n+10],segmin[n+10],segcount[n+10];

int main()

//min..max 分成n-1個區間 有n-2個點會落在這n-1個區間裡

for (int i = 1;i <= n;i++)else

segcount[idx]++;

}double pre = segmax[1];double maxgap = 0;

for (int i = 2;i<=n;i++)

pre = segmax[i];}}

printf("%.10f\n",maxgap);

return 0;

}

最大間隙問題

最大間隙問題 問題描述 最大間隙問題,給定n 11,x2,xn,求這n個數在實軸上相鄰2個數之間的最大差值。假設對任何實數的下取整函式耗時o 1 設計乙個計算複雜性最低的演算法解決最大間隙問題。演算法設計 對給定的n個實數x1,x2,xn,計算它們的最大間隙。資料輸入 輸入資料由檔名為 zdjian...

最大間隙問題

問題描述 最大間隙問題 給定n 個實數x1,x2 xn,求這n 個數在實軸上相鄰2 個數之間的最大差值。假設對任何實數的下取整函式耗o 1 設計解最大間隙問題的線性時間演算法。程式設計任務 對於給定的n 個實數x1,x2,xn,程式設計計算它們的最大間隙。資料輸入 輸入資料由檔名為input.txt...

最大間隙問題

給定n個實數,求出相鄰的兩個數,這兩個數的差值是所有相鄰數的最大 例如 1 3 7,8,則答案是3,7 思想如下 找出最大值和最小值,則所有的兩個數 m n max min n 1 因此,設定n 1 個區間,區間長度為 max min n 1,將所有數按照與min的差值對映到這些區間裡 則所有的兩個...