C++中最多k次交換後的最大排列
在本教程中,我們將編寫一個程式,查詢最多進行k次交換後的最大排列。
讓我們看看解決這個問題的步驟。
- 初始化陣列。
- 初始化一個大小為n+1的陣列來儲存索引。
- 遍歷陣列,並將每個元素的索引儲存在position陣列中。
- 編寫一個迴圈,直到n次迭代完成且k大於0。
- 將n - i元素的位置儲存在一個臨時變數temp中。
- 用position[n - i]更新當前元素arr[i]的位置。
- 用當前索引i更新position[n - i]。
- 將當前元素arr[i]與arr[temp]交換。k減1。
- 列印陣列元素。
示例
讓我們看看程式碼。
#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
結論
如果您在本教程中遇到任何疑問,請在評論區提出。
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP