ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ของ n องค์ประกอบ งานของเราคือ ค้นหาองค์ประกอบสูงสุด k ของอาร์เรย์ในลำดับเดิม
เราจำเป็นต้องค้นหาองค์ประกอบสูงสุด k ของอาร์เรย์แล้วพิมพ์ตามที่ได้จัดทำดัชนีไว้
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: arr[] ={5, 1, 3, 6, 2}, k =2
ผลลัพธ์: 5, 6
คำอธิบาย:
อิลิเมนต์สองตัวที่ใหญ่ที่สุดของอาร์เรย์คือ 6 และ 5 แต่ 5 มาก่อน 6 ในอาร์เรย์ดั้งเดิม ดังนั้นเราจึงพิมพ์ในลักษณะนั้น
แนวทางการแก้ปัญหา
เพื่อแก้ปัญหาและพิมพ์ k องค์ประกอบตามลำดับเดิม
สำหรับสิ่งนี้ เราจะสร้าง decArray ที่จะเก็บองค์ประกอบของ arr[] ตามลำดับจากมากไปน้อย จากนั้นเราจะสำรวจอาร์เรย์ดั้งเดิมและพิมพ์องค์ประกอบที่ใหญ่ที่สุด k ตามลำดับโดยใช้ decArray[]
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
bool seachVal(int decArr[], int k, int ele){
for(int i = 0; i < k; i++){
if( decArr[i] == ele)
return true;
}
return false;
}
void printKMaxEle(int arr[], int k, int n) {
int decArr[n];
for(int i = 0; i < n ; i++){
decArr[i] = arr[i];
}
sort(decArr, decArr + n, greater<int>());
for (int i = 0; i < n; ++i)
if ( seachVal(decArr, k, arr[i]) )
cout<<arr[i]<<" ";
}
int main() {
int arr[] = { 15, 1, 3, 6, 2, 34, 8, 9 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
cout<<k<<" maximum elements of the array in their original order are \n";
printKMaxEle(arr, k, n);
return 0;
} ผลลัพธ์
3 maximum elements of the array in their original order are 15 34 9