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

เขียนโปรแกรมในภาษา C++ เพื่อค้นหาค่าสูงสุดและค่าสูงสุดอันดับสองในอาร์เรย์ของจำนวนเต็มที่ไม่เรียงลำดับที่กำหนด


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

อินพุต-1

N = 5
A[ ] = { 2, 2, 1, 3, 4 }

ผลผลิต

4 3

คำอธิบาย − จากอาร์เรย์ที่กำหนด เราจะเห็นว่า '4' คือค่าสูงสุด และ '3' คือค่าสูงสุดอันดับสอง

อินพุต-2

N = 4
A[ ] = { 1,3,3,2 }

ผลผลิต

3 2

คำอธิบาย จากอาร์เรย์ขนาด 4 ที่กำหนด เราจะเห็นว่า '3' ใหญ่ที่สุดและ '2' มีขนาดใหญ่เป็นอันดับสอง ดังนั้นเราจะคืนค่า 3 2 เป็นเอาต์พุต

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

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

ในขั้นต้น หากองค์ประกอบปัจจุบันมากกว่าค่าสูงสุด เราจะเก็บค่าของมันไว้ที่ค่าสูงสุด และค่าของค่าสูงสุด (ก่อนหน้า) เป็นค่าสูงสุดอันดับสอง

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

  • เริ่มต้นและรับอินพุตขนาด N ของอาร์เรย์

  • ฟังก์ชัน maxAndSecondMax(int ​​arr[], int size) รับอาร์เรย์เป็นอินพุตและขนาดของอาร์เรย์ ซึ่งส่งคืนองค์ประกอบสูงสุดและสูงสุดที่สองของอาร์เรย์ที่กำหนด

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

  • มิฉะนั้น หากค่าปัจจุบันมากกว่าค่าสูงสุดที่สอง ให้แทนที่ค่าก่อนหน้าด้วยค่าปัจจุบัน นอกจากนี้ มูลค่าปัจจุบันไม่ควรเท่ากับสูงสุด

  • ตรวจสอบว่าค่าสูงสุดที่สองไม่มีค่าใดๆ หรือไม่

  • คืนค่า max และ max ที่สองเป็นผลลัพธ์สุดท้าย

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
void maxAndSecondMax(int *arr, int size){
   int max= INT_MIN;
   int s_max= INT_MIN;
   for(int i=0;i<size; ++i){
      if(arr[i] >max){
         s_max= max;
         max= arr[i];
      }
      else if(arr[i]> s_max && arr[i]!= max){
         s_max= arr[i];
      }
   }
   if(s_max==INT_MIN){
      s_max= -1;
   }
   cout<<max<<" "<<s_max;
}
int main(){
   int N= 6;
   int A[N]= {1,3,2,5,6,3};
   maxAndSecondMax(A,N);
   return 0;
}

ผลลัพธ์

หากเราจะเรียกใช้โค้ดข้างต้น ก็จะพิมพ์ผลลัพธ์เป็น

6 5

6 และ 5 เป็นองค์ประกอบที่แตกต่างกันในอาร์เรย์ซึ่งเป็นค่าสูงสุดและค่าสูงสุดอันดับสอง