ในปัญหานี้ เราได้รับ arr[] ซึ่งประกอบด้วยองค์ประกอบที่ไม่ได้เรียงลำดับ N งานของเราคือ ค้นหาสามองค์ประกอบที่ใหญ่ที่สุดในอาร์เรย์ .
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
Input : arr[] = {7, 3, 9, 12, 1} Output : 12, 9, 7
แนวทางการแก้ปัญหา
โดยพื้นฐานแล้วเราจำเป็นต้องค้นหาองค์ประกอบที่ใหญ่ที่สุดสามรายการของอาร์เรย์และพิมพ์ออกมา สามารถทำได้หลายวิธี
วิธีที่ 1
สำหรับองค์ประกอบที่ใหญ่ที่สุดสามองค์ประกอบ เราจะสร้างองค์ประกอบสามองค์ประกอบที่มีค่าของมัน สูงสุด สูงสุด 2 และสูงสุด 3 และตั้งค่าเหล่านี้เป็น arr[0].
จากนั้นเราจะวนลูปจากรูปแบบ i -> 1 ถึง n-1 และสำหรับแต่ละองค์ประกอบ
ถ้า (arr[i]> max) -> max3 =max2, max2 =max , max =arr[i].
อื่น ๆ ถ้า (arr[i]> max2) -> max3 =max2, max2 =arr[i].
else if (arr[i]> max3) -> max3 =arr[i].
ในตอนท้ายของลูป เราจะพิมพ์ทั้งสามค่า
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream> using namespace std; void findThreeLargestElements(int arr[], int arr_size){ int max, max2, max3; max3 = max = max2 = arr[0]; for(int i = 0; i < arr_size; i++){ if (arr[i] > max){ max3 = max2; max2 = max; max = arr[i]; } else if (arr[i] > max2){ max3 = max2; max2 = arr[i]; } else if (arr[i] > max3) max3 = arr[i]; } cout<<endl<<"Three largest elements of the array are "<<max<<", "<<max2<<", "<<max3; } int main(){ int arr[] = {15, 2, 7, 86, 0, 21, 50}; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The array is : "; for(int i = 0; i < n; i++) cout<<arr[i]<<"\t"; findThreeLargestElements(arr, n); return 0; }
ผลลัพธ์
The array is : 15 2 7 86 0 21 50 Three largest elements of the array are 86, 50, 21
วิธีที่ 2
อีกวิธีในการแก้ปัญหาคือการจัดเรียงอาร์เรย์แล้วพิมพ์องค์ประกอบสามตัวแรกของอาร์เรย์ซึ่งเป็นองค์ประกอบที่ใหญ่ที่สุดสามองค์ประกอบ
อัลกอริทึม
ขั้นตอนที่ 1 − จัดเรียงอาร์เรย์โดยใช้เทคนิคการเรียงลำดับ
ขั้นตอนที่ 2 − พิมพ์สามองค์ประกอบแรก :arr[0] , arr[1] , arr[2]
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <bits/stdc++.h> using namespace std; void findThreeLargestElements(int arr[], int n){ sort(arr, arr + n, std::greater<>()); int j = 0; cout<<"\nThree largest elements are "; for(int i = 0; i < n; i++){ if(arr[i] != arr[i+1]){ cout<<arr[i]<<" "; j++; } if(j == 3){ break; } } } int main(){ int arr[] = {15, 2, 7, 86, 0, 21, 50, 53, 50}; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The array is : "; for(int i = 0; i < n; i++) cout<<arr[i]<<"\t"; findThreeLargestElements(arr, n); return 0; }
ผลลัพธ์
The array is : 15 2 7 86 0 21 50 53 50 Three largest elements are 86 53 50