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

結論

如果您在本教程中遇到任何疑問,請在評論區提出。

更新於:2021年4月9日

556 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.