โจทย์
ได้รับอาร์เรย์ arr[] ขนาด n ทางเราต้อง หา k ตัวเลขสูงสุด แต่แสดงตามลำดับเดิมในอาร์เรย์
ตัวอย่าง
Input: arr[] = {5, 1, 3, 6, 2}, k = 2
Output: 5, 6
อธิบาย: ตัวเลขใหญ่สุด 2 ตัวคือ 6 และ 5 แต่ 5 อยู่ก่อน 6 ในอาร์เรย์เดิม
แนวทางแก้ปัญหา
- สร้างอาร์เรย์สำเนา เรียงจากมากไปน้อย (decArr)
- ท่องอาร์เรย์เดิม ถ้าตัวเลขอยู่ใน k ตัวแรกของ decArr ให้พิมพ์
โปรแกรมตัวอย่าง
#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