Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में तीसरा अधिकतम नंबर


समस्या विवरण

मान लीजिए हमारे पास पूर्णांकों की एक गैर-खाली सरणी है; हमें इस सरणी में तीसरा अधिकतम नंबर ज्ञात करना है। यदि तीसरा अधिकतम नंबर नहीं है, तो अधिकतम नंबर लौटाएं। चुनौती यह है कि हमें इसे रैखिक समय जटिलता में हल करना है।

उदाहरण

यदि इनपुट है: [5,3,8,9,1,4,6,2], तो आउटपुट होगा 6।

हल करने का दृष्टिकोण

इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:

  • a, b, c को NULL से आरंभ करें
  • i := 0 से आरंभ करें, जब i < nums का आकार, i को 1 से बढ़ाते हुए:
    • यदि a null है या nums[i] >= a का मान:
      • यदि a null नहीं है और nums[i] > a का मान:
        • c := b, b := a
      • a := nums[i]
    • अन्यथा यदि b null है या nums[i] >= b का मान:
      • यदि b null नहीं है और nums[i] > b का मान:
        • c := b
      • b := nums[i]
    • अन्यथा यदि c null है या nums[i] >= c का मान:
      • c := nums[i]
  • लौटाएं (यदि c null है, तो a का मान, अन्यथा c का मान)

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;
    }
};

int main() {
    Solution ob;
    vector<int> v = {5,3,8,9,1,4,6,2};
    cout << (ob.thirdMax(v));
    return 0;
}

इनपुट

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

आउटपुट

6
  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस

  1. - C++ में द्विभाजित ग्राफ में अधिकतम एज की संख्या

    समस्या कथन एक पूर्णांक N दिया गया है जो शीर्षों की संख्या दर्शाता है। कार्य N शीर्षों के द्विभाजित ग्राफ में संभव अधिकतम एज की संख्या ढूंढना है। द्विभाजित ग्राफ एक द्विभाजित ग्राफ वह है जिसमें शीर्षों के 2 सेट होते हैं। सेट ऐसे होते हैं कि एक ही सेट के शीर्ष कभी भी उनके बीच एज साझा नहीं करेंगे। उ