मान लीजिए कि हमारे पास पूर्णांकों की एक गैर-रिक्त सरणी है; हमें इस सरणी में तीसरी अधिकतम संख्या ज्ञात करनी है। यदि कोई तीसरी अधिकतम संख्या नहीं है, तो अधिकतम एक वापस करें। चुनौती यह है कि हमें रैखिक समय जटिलता का उपयोग करके इसे हल करना होगा।
इसलिए, यदि इनपुट [5,3,8,9,1,4,6,2] जैसा है, तो आउटपुट 6 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
NULL के साथ a, b, c को इनिशियलाइज़ करें
-
इनिशियलाइज़ i :=0 के लिए, जब i <अंकों का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -
-
यदि a शून्य या अंक है [i]>=a का मान, तो −
-
यदि अशक्त नहीं है और nums[i]> a का मान है, तो −
-
सी:=बी, बी:=ए
-
-
ए:=अंक [i]
-
-
अन्यथा जब b रिक्त हो या nums[i]>=b का मान हो, तब -
-
यदि b रिक्त नहीं है और nums[i]> b का मान है, तो -
-
सी:=बी
-
-
बी:=अंक [i]
-
-
अन्यथा जब c अशक्त हो या nums[i]>=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