´問題描述:
最大間隙問題:給定 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的差值對映到這些區間裡 則所有的兩個...