आसान 0 हल किए गए 0% स्वीकृति

दूसरा सबसे बड़ा मान

दूसरा सबसे बड़ा भिन्न मान खोजें।

आप क्या सीखेंगे

  • एक पास में दो सबसे बड़े मान ट्रैक करना
  • अधिकतम के दोहराव अनदेखा करना
  • दूसरे मान के बिना वाली सूची संभालना

समस्या

सूची में दूसरा सबसे बड़ा भिन्न मान लौटाएँ। दोहराए गए मान केवल एक बार गिने जाते हैं।

second_largest(numbers) को लागू करें।

इनपुट

numbers: गैर-ऋणात्मक पूर्णांकों की एक सूची।

आउटपुट

दूसरा सबसे बड़ा भिन्न मान लौटाएँ, या यदि ऐसा कोई मान नहीं है तो -1 लौटाएँ।

सीमाएँ

0 ≤ लंबाई ≤ 100,000; 0 ≤ प्रत्येक मान ≤ 10⁹

उदाहरण

उदाहरण 1
इनपुट:
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 है।

उदाहरण 2
इनपुट:
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 के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।