ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ที่ประกอบด้วยตัวเลขบวก n ตัว ภารกิจของเราคือค้นหาจำนวนการดำเนินการรวมขั้นต่ำเพื่อสร้างอาร์เรย์พาลินโดรม
อาร์เรย์พาลินโดรม คล้ายกับสตริง palindrome องค์ประกอบที่ดัชนี i และ n-i ควรเหมือนกัน
ตัวอย่าง
{5, 1, 7, 2, 7, 1, 5} คำอธิบายปัญหา − เราจำเป็นต้องสร้างอาร์เรย์พาลินโดรมโดยดำเนินการกับมัน และการดำเนินการเดียวที่ถูกต้องในอาร์เรย์คือการดำเนินการผสาน ซึ่งเราจะเพิ่มองค์ประกอบที่ดัชนี i และ i+1
เราจำเป็นต้องส่งคืนจำนวนขั้นต่ำของการดำเนินการดังกล่าวที่จำเป็นในการสร้างอาร์เรย์ palindrome ที่กำหนด
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
arr[] = {4, 1, 7, 6, 1, 5} ผลลัพธ์
2
คำอธิบาย
เราต้องการการดำเนินการควบรวมสองครั้ง
การรวมองค์ประกอบที่ดัชนี 0 และ 1 ทำให้อาร์เรย์ {5, 7, 6, 1, 5}.
หลังจากรวมองค์ประกอบที่ดัชนี 2 และ 3 แล้ว จะทำให้อาร์เรย์ {5, 7, 7, 5}
แนวทางการแก้ปัญหา
วิธีแก้ปัญหาอย่างง่ายคือการค้นหาจำนวนการดำเนินการเพื่อสร้างสตริงพาลินโดรม ทำได้โดยใช้ตัวชี้สองตัวเริ่มต้นและสิ้นสุด หากทั้งสองจุดตรงเช่น start ==สิ้นสุดอาร์เรย์จะเป็น palindrome ดังนั้น เราจะวนรอบสำหรับจุดเริ่มต้นและจุดสิ้นสุด และดำเนินการตามเงื่อนไขเหล่านี้ -
-
ถ้า arr[start] ==arr[end] หมายถึงดัชนีปัจจุบัน อาร์เรย์จะเป็นไปตามเงื่อนไขของ palindrome For จะย้ายไปยังดัชนีถัดไป เช่น. start++ และ end--.
-
ถ้า arr[start]> arr[end] ในกรณีนี้ เราจำเป็นต้องดำเนินการผสานสำหรับดัชนีสิ้นสุด และเพิ่ม mergeCount ขึ้น 1
-
ถ้า arr[start]
เราจะคืนจำนวนการรวมเมื่อเริ่มต้น ==สิ้นสุด
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream>
using namespace std;
int findMergeCount(int arr[], int n){
int mergeCount = 0;
int start = 0;
int end = n-1;
while(start <= end){
if (arr[start] == arr[end]){
start++;
end--;
}
else if (arr[start] > arr[end]){
end--;
arr[end] += arr[end+1] ;
mergeCount++;
} else {
start++;
arr[start] += arr[start-1];
mergeCount++;
}
}
return mergeCount;
}
int main(){
int arr[] = {4, 1, 7, 6, 1, 5};
int n = sizeof(arr)/sizeof(arr[0]);
cout<<"The minimum number of merge operations required to make the array palindrome is "<<findMergeCount(arr, n);
return 0;
} ผลลัพธ์
The minimum number of merge operations required to make the array palindrome is 2