C++で最大k回のスワップ後の最大の順列
このチュートリアルでは、最大k回のスワップ後に最大の順列を見つけるプログラムを作成します。
問題を解決するための手順を見てみましょう。
- アレイを初期化します。
- 配列を初期化して、サイズn+1のインデックスを格納します。
- 配列を反復処理し、各要素のインデックスを位置配列に格納します。
- nとkが0より大きくなるまで繰り返すループを記述します。
- n-i要素の位置を一時変数に格納します。
- 現在の要素arr[i]の位置をposition[n-i]で更新します。
- 現在のインデックスiで位置位置[n-i]を更新します。
- 現在の要素arr[i]をarr[temp.Decrementk。 と交換します。
- 配列要素を印刷します。
例
コードを見てみましょう。
#include <bits/stdc++.h> using namespace std; void getLargestPermutation(int arr[], int n, int k) { int position[n + 1]; for (int i = 0; i < n; ++i) { position[arr[i]] = i; } for (int i = 0; i < n && k; ++i) { if (arr[i] == n - i) { continue; } int temp = position[n - i]; position[arr[i]] = position[n - i]; position[n - i] = i; swap(arr[temp], arr[i]); --k; } } int main() { int arr[] = { 5, 3, 2, 6, 7, 1, 4 }; int n = 7, k = 3; getLargestPermutation(arr, n, k); for (int i = 0; i < n; ++i) { cout << arr[i]; } cout << endl; return 0; }
出力
上記のコードを実行すると、次の結果が得られます。
7653214
結論
チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。
-
C++で回文順列を作成するための最小限の削除
問題の説明 文字列Sが与えられた場合、文字列Sの順列を回文にするために削除できる最小文字を見つける必要があります 例 str =“ abcdba”の場合、1文字に削除されます。つまり、「c」または「d」のいずれかです。 アルゴリズム 1. There can be two types of a palindrome, even length, and odd length palindromes 2. We can deduce the fact that an even length palindrome must have every character occurring even
-
C++でa+b + c=dとなるような配列で最大のdを見つけます
整数のセットがあるとします。数「d」を見つける必要があります。ここで、d =a + b + cであり、最大化(a + b + c)する必要があり、すべてのa、b、c、およびdがセットに存在します。セットには、少なくとも1つの要素、最大で1000の要素が含まれます。各要素は有限数になります。セットが{2、3、5、7、12}の場合、12が最大です。これは2+3 + 7で表すことができます この問題を解決するために、ハッシュ手法を使用できます。 (a + b)のすべてのペアの合計をハッシュテーブルに格納し、次にすべてのペア(c、d)をトラバースし、検索(d-c)がテーブルに存在するかどうかを確認し