이 문제에서는 같은 선에 있는 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