Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm k phần tử tối đa của mảng theo thứ tự ban đầu trong C ++

Trong bài toán này, chúng ta được cung cấp một mảng arr [] gồm n phần tử. Nhiệm vụ của chúng ta là tìm k phần tử tối đa của mảng theo thứ tự ban đầu.

Chúng ta cần tìm k phần tử tối đa của mảng và sau đó in ra như chúng đã được lập chỉ mục ban đầu.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào: arr [] ={5, 1, 3, 6, 2}, k =2

Đầu ra: 5, 6

Giải thích:

Hai phần tử lớn nhất của mảng là 6 và 5. Nhưng 5 đứng trước 6 trong mảng ban đầu, do đó chúng tôi đã in theo cách đó.

Phương pháp tiếp cận giải pháp

Để giải quyết vấn đề và in k phần tử theo thứ tự ban đầu.

Đối với điều này, chúng tôi sẽ tạo một decArray sẽ lưu trữ các phần tử của arr [] theo thứ tự giảm dần. Sau đó, chúng tôi sẽ duyệt qua mảng ban đầu và in k phần tử lớn nhất theo thứ tự bằng cách sử dụng decArray [].

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#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;
}

Đầu ra

3 maximum elements of the array in their original order are
15 34 9