Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การเปลี่ยนแปลงที่ใหญ่ที่สุดหลังจากการแลกเปลี่ยนสูงสุด k ใน C ++


ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่หาการเปลี่ยนแปลงครั้งใหญ่ที่สุดหลังจากที่มีการแลกเปลี่ยนมากที่สุด k ครั้ง

มาดูขั้นตอนการแก้ปัญหากัน

  • เริ่มต้นอาร์เรย์
  • เริ่มต้นอาร์เรย์เพื่อจัดเก็บดัชนีด้วยขนาด n + 1
  • วนซ้ำในอาร์เรย์และเก็บดัชนีของแต่ละองค์ประกอบไว้ในอาร์เรย์ตำแหน่ง
  • เขียนลูปที่วนซ้ำจนถึง n และ k มากกว่า 0
    • จัดเก็บตำแหน่งขององค์ประกอบ n - i ในตัวแปร temp
    • อัปเดตตำแหน่งขององค์ประกอบปัจจุบัน arr[i] ด้วยตำแหน่ง[n - i].
    • อัปเดตตำแหน่งตำแหน่ง[n - i] ด้วยดัชนีปัจจุบัน i.
    • สลับองค์ประกอบปัจจุบัน arr[i] กับ arr[temp.Decrement k.
  • พิมพ์องค์ประกอบอาร์เรย์

ตัวอย่าง

มาดูโค้ดกันเลย

#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

บทสรุป

หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น