কম্পিউটার

C++ এ তৃতীয় সর্বোচ্চ সংখ্যা


ধরুন আমাদের পূর্ণসংখ্যার একটি অ-খালি অ্যারে আছে; আমাদের এই অ্যারেতে তৃতীয় সর্বোচ্চ সংখ্যাটি খুঁজে বের করতে হবে। যদি তৃতীয় সর্বোচ্চ নম্বর না থাকে, তাহলে সর্বোচ্চ নম্বরটি ফেরত দিন। চ্যালেঞ্জ হল, আমাদের রৈখিক সময় জটিলতা ব্যবহার করে এটি সমাধান করতে হবে।

সুতরাং, ইনপুট যদি [5,3,8,9,1,4,6,2] এর মত হয়, তাহলে আউটপুট হবে 6।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • NULL

    দিয়ে a, b, c আরম্ভ করুন
  • আরম্ভ করার জন্য i :=0, যখন i <সংখ্যার আকার, আপডেট (i 1 দ্বারা বৃদ্ধি), −

    • যদি a নাল বা nums[i]>=a এর মান হয়, তাহলে −

      • যদি নাল এবং nums[i]> a এর মান না হয়, তাহলে −

        • c :=b, b :=a

      • a :=সংখ্যা[i]

    • অন্যথায় যখন b নাল বা nums[i]>=b এর মান, তাহলে −

      • যদি b নাল না হয় এবং nums[i]> b এর মান হয়, তাহলে −

        • c :=b

      • b :=সংখ্যা[i]

    • অন্যথায় যখন c নাল বা nums[i]>=c এর মান, তাহলে −

      • c :=সংখ্যা[i]

  • রিটার্ন (যদি c নাল হয়, তাহলে a এর মান, অন্যথায় c এর মান)

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int thirdMax(vector<int>& nums) {
      int *a, *b, *c;
      a = b = c = NULL;
      for (int i = 0; i < nums.size(); ++i) {
         if (!a || nums[i] >= *a) {
            if (a && nums[i] > *a) {
               c = b;
               b = a;
            }
            a = &nums[i];
         }
         else if (!b || nums[i] >= *b) {
            if (b && nums[i] > *b) {
               c = b;
            }
            b = &nums[i];
         }
         else if (!c || nums[i] >= *c) {
            c = &nums[i];
         }
      }
      return !c ? *a : *c;
   }
};
main(){
   Solution ob;
   vector<int> v = {5,3,8,9,1,4,6,2};
   cout << (ob.thirdMax(v));
}

ইনপুট

{5,3,8,9,1,4,6,2}

আউটপুট

6

  1. C++ এ মিতব্যয়ী নম্বর

  2. C++ পেন্টাটোপ নম্বর

  3. C++ এ একটি সাবস্ট্রিং-এর সংঘটনের সর্বাধিক সংখ্যা

  4. C++ এ দ্বিপক্ষীয় গ্রাফে প্রান্তের সর্বাধিক সংখ্যা