在 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 個最大元素。

程式說明我們解決方案的工作原理,

示例

線上演示

#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 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.