मान लीजिए हमारे पास एक क्षैतिज संख्या रेखा है। उस नंबर लाइन पर, हमारे पास स्थिति स्टेशनों [0], स्टेशनों [1], ..., स्टेशनों [एन -1] पर गैस स्टेशन हैं, जहां एन =स्टेशनों की सरणी का आकार। अब, हम K और गैस स्टेशन जोड़ते हैं ताकि D, आसन्न गैस स्टेशनों के बीच की अधिकतम दूरी कम से कम हो। हमें D का न्यूनतम संभव मान ज्ञात करना है।
इसलिए, यदि इनपुट स्टेशनों की तरह है =[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], K =9, तो आउटपुट 0.5
होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन को परिभाषित करें ठीक (), इसमें x, सरणी v,
लगेगा -
रिट:=0
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
रिट :=रिट + सीलिंग ऑफ़ (v[i + 1] - v[i]) / x
-
-
वापसी रिट
-
मुख्य विधि से निम्न कार्य करें -
-
कम :=0
-
n :=s का आकार
-
उच्च :=s[n - 1] - s[0]
-
जबकि उच्च - निम्न>=1e-6, करें −
-
मध्य:=(निम्न + उच्च) / 2.0
-
एक्स:=ठीक है (मध्य, एस)
-
यदि x> K, तो -
-
कम :=मध्य
-
-
अन्यथा
-
उच्च :=मध्य
-
-
-
उच्च वापसी
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int ok(double x, vector <int>& v){
int ret = 0;
for (int i = 0; i < v.size() - 1; i++) {
ret += ceil((v[i + 1] - v[i]) / x) - 1;
}
return ret;
}
double minmaxGasDist(vector<int>& s, int K) {
double low = 0;
int n = s.size();
double high = s[n - 1] - s[0];
while (high - low >= 1e-6) {
double mid = (low + high) / 2.0;
int x = ok(mid, s);
if (x > K) {
low = mid;
}
else {
high = mid;
}
}
return high;
}
};
main(){
Solution ob;
vector<int> v = {1,2,3,4,5,6,7,8,9,10};
cout << (ob.minmaxGasDist(v, 9));
} इनपुट
{1,2,3,4,5,6,7,8,9,10}, 9 आउटपुट
0.5