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

หา k ตัวเลขสูงสุดในอาร์เรย์ตามลำดับเดิมใน C++

โจทย์

ได้รับอาร์เรย์ arr[] ขนาด n ทางเราต้อง หา k ตัวเลขสูงสุด แต่แสดงตามลำดับเดิมในอาร์เรย์

ตัวอย่าง

Input: arr[] = {5, 1, 3, 6, 2}, k = 2

Output: 5, 6

อธิบาย: ตัวเลขใหญ่สุด 2 ตัวคือ 6 และ 5 แต่ 5 อยู่ก่อน 6 ในอาร์เรย์เดิม

แนวทางแก้ปัญหา

  1. สร้างอาร์เรย์สำเนา เรียงจากมากไปน้อย (decArr)
  2. ท่องอาร์เรย์เดิม ถ้าตัวเลขอยู่ใน 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