ในปัญหานี้ เราได้รับอาร์เรย์ของ n จุดที่อยู่บนเส้นเดียวกัน งานของเราคือการวางองค์ประกอบ k ของอาร์เรย์ในลักษณะที่ระยะห่างขั้นต่ำระหว่างองค์ประกอบทั้งสองจะถูกขยายให้ใหญ่สุด
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล − อาร์เรย์ ={}
ผลผลิต −
เพื่อแก้ปัญหานี้ เราจะต้องหาระยะทางต่ำสุดที่เป็นไปได้สูงสุด สำหรับปัญหาดังกล่าวก่อนอื่น เราต้องจัดเรียงอาร์เรย์ที่กำหนด จากนั้นจึงทำการค้นหาแบบไบนารีจนกว่าเราจะได้วิธีแก้ปัญหาในช่วงกลางๆ
ตัวอย่าง
โปรแกรมแสดงการใช้งานโซลูชันของเรา
#include <bits/stdc++.h>
using namespace std;
bool canGenerateResult(int mid, int arr[], int n, int k) {
int pos = arr[0];
int elements = 1;
for (int i=1; i<n; i++){
if (arr[i] - pos >= mid){
pos = arr[i];
elements++;
if (elements == k)
return true;
}
}
return 0;
}
int maxMinDist(int arr[], int n, int k) {
sort(arr,arr+n);
int res = -1;
int left = arr[0], right = arr[n-1];
while (left < right){
int mid = (left + right)/2;
if (canGenerateResult(mid, arr, n, k)){
res = max(res, mid);
left = mid + 1;
}
else
right = mid;
}
return res;
}
int main() {
int arr[] = {3, 5, 6, 9, 1, 8};
int n = sizeof(arr)/sizeof(arr[0]);
int k = 3;
cout<<"The maximized minimum distance is : "<<maxMinDist(arr, n, k);
return 0;
} ผลลัพธ์
The maximized minimum distance is : 4