समस्या
सूची में दूसरा सबसे बड़ा भिन्न मान लौटाएँ। दोहराए गए मान केवल एक बार गिने जाते हैं।
second_largest(numbers) को लागू करें।
इनपुट
numbers: गैर-ऋणात्मक पूर्णांकों की एक सूची।
आउटपुट
दूसरा सबसे बड़ा भिन्न मान लौटाएँ, या यदि ऐसा कोई मान नहीं है तो -1 लौटाएँ।
सीमाएँ
0 ≤ लंबाई ≤ 100,000; 0 ≤ प्रत्येक मान ≤ 10⁹
उदाहरण
इनपुट:
numbers = [4, 9, 7, 9]
अपेक्षित आउटपुट:
expected = 7
इनपुट:
std::vector<long long> numbers = {4, 9, 7, 9};
अपेक्षित आउटपुट:
long long expected = 7;
इनपुट:
long[] numbers = new long[] {4, 9, 7, 9};
अपेक्षित आउटपुट:
long expected = 7;
व्याख्या
भिन्न मान हैं 9, 7, 4; दूसरा सबसे बड़ा 7 है।
इनपुट:
numbers = [5, 5]
अपेक्षित आउटपुट:
expected = -1
इनपुट:
std::vector<long long> numbers = {5, 5};
अपेक्षित आउटपुट:
long long expected = -1;
इनपुट:
long[] numbers = new long[] {5, 5};
अपेक्षित आउटपुट:
long expected = -1;
व्याख्या
केवल एक भिन्न मान मौजूद है, इसलिए उत्तर -1 है।
कैसे हल करें
पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।
संकेत 1
आपको largest और उससे अगला अलग value चाहिए, सिर्फ top दो positions नहीं.
संकेत 2
Scan करते समय दो distinct maxima track करें, और जब नया value ऊपर या बीच में fit हो तो उन्हें update करें.
संकेत 3
अगर second distinct value कभी न मिले, तो special fallback value return करें.
अपेक्षित जटिलता
समय O(n), अतिरिक्त स्थान O(1)
संदर्भ
यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।