在 C++ 中查找数组中按原始顺序排列的 k 个最大元素


在这个问题中,我们给定一个包含 n 个元素的数组 arr[]。我们的任务是 *查找数组中按原始顺序排列的 k 个最大元素*。

我们需要找到数组中的 k 个最大元素,然后按其最初的索引顺序打印它们。

让我们举一个例子来理解这个问题,

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

输出:5, 6

解释:

数组中最大的两个元素是 6 和 5。但是 5 在原始数组中出现在 6 之前,因此我们按这种方式打印。

解决方案方法

为了解决问题,并按原始顺序打印 k 个元素。

为此,我们将创建一个 decArray,它将以降序存储 arr[] 的元素。然后,我们将遍历原始数组,并使用 decArray[] 按顺序打印 k 个最大元素。

程序说明我们解决方案的工作原理,

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

示例

在线演示

#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

更新于: 2021年1月25日

110 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告