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

C++ में k के नीचे और ऊपर के तत्वों की समान संख्या प्राप्त करने के लिए सबलिस्ट को हटाने का कार्यक्रम

मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे nums और दूसरी संख्या k कहा जाता है, हम किसी भी सबलिस्ट को सूची से अधिकतम एक बार हटा सकते हैं। हमें सबसे लंबी परिणामी सूची की लंबाई का पता लगाना होगा जैसे कि k से सख्ती से कम और k से सख्ती से बड़ी संख्या समान हो।

इसलिए, यदि इनपुट संख्या =[6, 10, 8, 9, 3, 5], k =6 की तरह है, तो आउटपुट 5 होगा, जैसे कि हम सबलिस्ट [9] को हटा दें तो हमें [6, 10, 8, 3, 5] और दो संख्याएँ [3, 5] हैं जो 6 से छोटी हैं और दो संख्याएँ [10, 8] 6 से बड़ी हैं।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • संख्या + 1 के समान आकार की एक सरणी v परिभाषित करें और 0 से भरें
  • सीएनटी:=0
  • इनिशियलाइज़ i :=0 के लिए, जब i <अंकों का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -
    • यदि अंक [i]
    • (cnt 1 से बढ़ाएँ)
  • अन्यथा जब nums[i]> k, तब:
    • (cnt 1 से घटाएं)
  • v[i + 1] =cnt
  • यदि v का अंतिम तत्व 0 है, तो अंकों का आकार लौटाएं
    • डेल्टा:=v का अंतिम तत्व
  • एक मानचित्र को परिभाषित करें मी
  • उत्तर:=अनंत
  • इनिशियलाइज़ i :=1 के लिए, जब i <=v का आकार, अपडेट करें (i को 1 से बढ़ाएँ), −
      करें
    • यदि m[v[i] - v का अंतिम अवयव 0 के बराबर नहीं है या (v[i] - v का अंतिम अवयव 0 के समान है), तो −
      • Ans :=न्यूनतम उत्तर और i - m[v[i] - v का अंतिम तत्व]
    • m[v[i]] :=i
  • यदि उत्तर अनंत के समान है, तो −
    • वापसी 0
  • अन्यथा
    • अंकों का वापसी आकार
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int solve(vector<int>& nums, int k) {
          vector<int> v(nums.size() + 1, 0);
          int cnt = 0;
          for (int i = 0; i < nums.size(); ++i) {
             if (nums[i] < k)
                ++cnt;
             else if (nums[i] > k)
                --cnt;
             v[i + 1] = cnt;
          }
          if (v.back() == 0) return int(nums.size());
          int delta = v.back();
          map<int, int> m;
          int ans = INT_MAX;
          for (int i = 1; i <= v.size(); ++i) {
             if (m[v[i] - v.back()] != 0 || v[i] - v.back() == 0) {
                ans = min(ans, i - m[v[i] - v.back()]);
             }
             m[v[i]] = i;
          }
          if (ans == INT_MAX)
             return 0;
          else
             return int(nums.size() - ans);
       }
    };
    main(){
       Solution ob;
       vector<int> v = {6, 10, 8, 9, 3, 5};
       int k = 6;
       cout << ob.solve(v, k); }

    इनपुट

    {6, 10, 8, 9, 3, 5}, 6

    आउटपुट

    5

    1. सरणी तत्वों के गुणन के लिए C++ प्रोग्राम

      पूर्णांक तत्वों की एक सरणी के साथ दिया गया और कार्य एक सरणी के तत्वों को गुणा करना और इसे प्रदर्शित करना है। उदाहरण Input-: arr[]={1,2,3,4,5,6,7} Output-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 Input-: arr[]={3, 4,6, 2, 7, 8, 4} Output-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 नीचे दिए गए कार्यक्रम में उपयोग क

    1. C++ प्रोग्राम बड़ी संख्या में तत्वों पर त्वरित सॉर्ट करने के लिए

      क्विकसॉर्ट तकनीक सूची को दो भागों में विभाजित करके की जाती है। प्रारंभ में विभाजन एल्गोरिथम द्वारा एक धुरी तत्व चुना जाता है। पिवट का बायां भाग पिवट की तुलना में छोटे मान रखता है, और दायां भाग बड़ा मान रखता है। विभाजन के बाद, प्रत्येक अलग सूचियों को एक ही प्रक्रिया का उपयोग करके विभाजित किया जाता है

    1. C++ प्रोग्राम बाइनरी नंबर को ऑक्टल में बदलने के लिए और इसके विपरीत

      एक कंप्यूटर सिस्टम में, बाइनरी नंबर बाइनरी नंबर सिस्टम में व्यक्त किया जाता है जबकि ऑक्टल नंबर ऑक्टल नंबर सिस्टम में होता है। बाइनरी नंबर बेस 2 में है जबकि ऑक्टल नंबर बेस 8 में है। बाइनरी नंबर और उनके संगत ऑक्टल नंबर के उदाहरण इस प्रकार हैं - बाइनरी नंबर अष्टाधारी संख्या 01010 12 00111 7 11001