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

指定されたセットのMEXをC++でxに等しくするための最小操作


問題の説明

n個の整数のセットが与えられた場合、最小数の操作を実行して(セットに要素を挿入/セットから要素を削除できます)、セットのMEXをx(指定されたもの)に等しくします。

−整数のセットのMEXは、その中に存在しない最小の非負の整数です。たとえば、セット{0、2、4}のMEXは1であり、セット{1、2、3}のMEXは0

です。

n=5およびx=3で、配列が{0、4、5、6、7}の場合、最低2つの操作が必要です

アルゴリズム

  • アプローチは、最終セットでx未満のすべての要素が存在する必要があり、xが存在してはならず、xより大きい要素は重要ではないことを確認することです。
  • したがって、初期セットに存在しないx未満の要素の数をカウントし、これを回答に追加します。
  • xが存在する場合、xを削除する必要があるため、回答に1を追加します。

#include <iostream>
using namespace std;
int getMinOperations(int *arr, int n, int x) {
   int k = x, i = 0;
   while (n--) {
      if (arr[n] < x) {
         --k;
      }
      if (arr[n] == x) {
         ++k;
      }  
   }
   return k;
}
int main() {
   int arr[] = {0, 4, 5, 6, 7};
   int n = sizeof(arr) / sizeof(arr[0]); int x = 3;
   cout << "Minimum required operations = " << getMinOperations(arr, n, x) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Minimum required operations = 2

  1. C++を使用して2つの文字列を等しくするために必要な特定の操作の最小数。

    問題の説明 2つの文字列str1とstr2がある場合、両方の文字列に文字「a」と「b」が含まれます。両方の文字列は同じ長さです。両方の文字列に1つの_(空のスペース)があります。タスクは、次の操作の最小数を実行することにより、最初の文字列を2番目の文字列に変換することです- _が位置Iにある場合、_は位置i+1またはi-1の文字と交換できます 位置i+1とi+2の文字が異なる場合、_は位置i+1またはi+2の文字と交換できます 同様に、位置i-1とi-2の文字が異なる場合、_は位置i-1またはi-2の文字と交換できます str1 =“ aba_a”およびstr2 =“

  2. 配列のGCDをC++でkの倍数にするための最小操作

    配列arrと別の値kがあるとします。配列のGCDをkの倍数に等しくするために、最小数の演算を見つける必要があります。この場合、操作は値を増減しています。配列が{4、5、6}のようで、kが5であるとします。4を1増やし、6を1減らすことができるので、5になります。ここでの演算数は2です。 結果を得るには、次の手順に従う必要があります- 手順 − 配列内のすべての要素eについて、手順2と3に従います kの場合、結果を(e mod k)と(k – e mod k)の最小値として増やします。 それ以外の場合、結果は結果+ k – eになります 結果を返す 例 #include <io