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

ค้นหาองค์ประกอบสูงสุดของอาร์เรย์ k ในลำดับดั้งเดิมใน C ++


ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ของ n องค์ประกอบ งานของเราคือ ค้นหาองค์ประกอบสูงสุด k ของอาร์เรย์ในลำดับเดิม

เราจำเป็นต้องค้นหาองค์ประกอบสูงสุด k ของอาร์เรย์แล้วพิมพ์ตามที่ได้จัดทำดัชนีไว้

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล: arr[] ={5, 1, 3, 6, 2}, k =2

ผลลัพธ์: 5, 6

คำอธิบาย:

อิลิเมนต์สองตัวที่ใหญ่ที่สุดของอาร์เรย์คือ 6 และ 5 แต่ 5 มาก่อน 6 ในอาร์เรย์ดั้งเดิม ดังนั้นเราจึงพิมพ์ในลักษณะนั้น

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

เพื่อแก้ปัญหาและพิมพ์ k องค์ประกอบตามลำดับเดิม

สำหรับสิ่งนี้ เราจะสร้าง decArray ที่จะเก็บองค์ประกอบของ arr[] ตามลำดับจากมากไปน้อย จากนั้นเราจะสำรวจอาร์เรย์ดั้งเดิมและพิมพ์องค์ประกอบที่ใหญ่ที่สุด k ตามลำดับโดยใช้ decArray[]

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#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