ในปัญหานี้ เราได้รับอาร์เรย์ของ 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