在 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

更新於: 2020年4月17日

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.