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

อัลกอริธึมการกลับรายการสำหรับการหมุนอาร์เรย์โดยใช้ C++


ในปัญหาที่กำหนด เราได้รับอาร์เรย์ และเราจำเป็นต้องหมุนอาร์เรย์ด้วยองค์ประกอบ d โดยใช้อัลกอริธึมการกลับรายการ ตัวอย่างเช่น −

Input : arr[] = [1, 2, 3, 4, 5, 6, 7], d = 2
Output : arr[] = [3, 4, 5, 6, 7, 1, 2]
Explanation : As you can see we have to rotate this array by d = 2 but our main task is to achieve this by using a reversal technique.

เราทำการคำนวณการหมุนของอาร์เรย์โดยใช้เทคนิคการกลับรายการ และเราสรุปได้ว่า −

  • ขั้นแรก เราย้อนกลับองค์ประกอบ d แรกของอาร์เรย์
  • ประการที่สอง เราย้อนกลับองค์ประกอบที่เหลือ
  • ประการที่สาม เราย้อนกลับทั้งอาร์เรย์

และด้วยการใช้สามขั้นตอนนี้ เราจะได้อาร์เรย์ที่หมุนได้

แนวทางในการหาทางออก

ในปัญหานี้ อย่างแรก เราจะสร้างฟังก์ชันสำหรับการกลับองค์ประกอบ ตอนนี้เราทำตามขั้นตอนที่ให้ไว้ด้านบน

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;

void reverseArray(int arr[], int start, int end) { // our reversal algorithm
   while (start < end) { // if start becomes equal to end we break the loop
      int temp = arr[start];
      arr[start] = arr[end];
      arr[end] = temp;
      start++;
      end--;
   }
   return ;
}
void Rotate(int arr[], int d, int n) { // rotation function
   if (d == 0) // no rotation required
      return;
   d = d % n; // when d becomes equal to n so our array comes to its original form
   reverseArray(arr, 0, d - 1); // reversing first d elements
   reverseArray(arr, d, n - 1); // reversing the remaining elements
   reverseArray(arr, 0, n - 1); // reversing the whole array

   return ;
}
int main() {
   int arr[] = { 1, 2, 3, 4, 5, 6, 7 }; // given array
   int n = sizeof(arr) / sizeof(arr[0]); // size of our array
   int d = 2;
   Rotate(arr, d, n);
   for(int i = 0; i < n; i++) // printing the array
      cout << arr[i] << " ";
   cout << "\n";
   return 0;
}

ผลลัพธ์

3 4 5 6 7 1 2

คำอธิบายของโค้ดด้านบน

ในแนวทางข้างต้น ก่อนอื่นเราสร้างเทคนิคการกลับรายการของเรา ซึ่งจะใช้พารามิเตอร์สามตัว ได้แก่ อาร์เรย์ ดัชนีเริ่มต้น และดัชนีสิ้นสุด และย้อนกลับอาร์เรย์ของเราตั้งแต่ต้นจนจบตอนนี้ ในขณะที่เราพัฒนาอัลกอริทึมของเราก่อนหน้านี้ เราจะใช้อัลกอริทึมนั้นโดยใช้ฟังก์ชันนี้ ก่อนอื่นเราย้อนกลับองค์ประกอบ d แรก ประการที่สอง เรากลับองค์ประกอบที่เหลือ และสุดท้าย เรากลับอาร์เรย์ทั้งหมด เป็นผลให้อาร์เรย์ของเราถูกหมุนโดย d ในฟังก์ชันการหมุน เรากำลังสร้าง d =d % n เนื่องจากถ้าเราหมุนองค์ประกอบ n ตัวแรกของอาร์เรย์ คำตอบที่เราได้รับจะเหมือนเดิม นั่นคือเหตุผลที่เราสร้าง mod ของ d ด้วย n

บทสรุป

ในบทความนี้ เราแก้ปัญหาในการใช้อัลกอริธึมการกลับรายการสำหรับการหมุนอาร์เรย์ นอกจากนี้เรายังได้เรียนรู้โปรแกรม C ++ สำหรับปัญหานี้และแนวทางที่สมบูรณ์ ( Normal) ซึ่งเราแก้ไขปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, java, python และภาษาอื่นๆ เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์