在 C++ 中放置 k 个元素以使最小距离最大化
在这个问题中,我们得到一个包含 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
广告