指定されたセットの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
-
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 =“
-
配列の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