放置k个元素,以使最小距离在C ++中最大化

在这个问题中,我们得到了位于同一条线上的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

以上是 放置k个元素,以使最小距离在C ++中最大化 的全部内容, 来源链接: utcz.com/z/345460.html

回到顶部