C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C++で2つの要素が隣接しないような循環配列の最大合計

    この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ

  2. C++を使用してすべての要素が割り切れるような配列要素を見つけます

    要素が少ない配列Aがあるとします。すべての要素をそれで分割できるように、Aから要素を見つける必要があります。 Aが[15、21、69、33、3、72、81]のようであるとすると、すべての数値は3で割り切れる可能性があるため、要素は3になります。 この問題を解決するために、Aの最小の数値を取得し、すべての数値を最小の数値で除算できるかどうかを確認します。はいの場合は数値を返し、そうでない場合はfalseを返します。 例 #include<iostream> #include<algorithm> using namespace std; int getNumber(in