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