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

C++ में आकार k की प्रत्येक विंडो में पहला ऋणात्मक पूर्णांक

इस समस्या में, हमें एक सरणी arr[] दी गई है जिसमें N पूर्णांक मान और आकार N की एक विंडो शामिल है। हमारा कार्य आकार k की प्रत्येक विंडो में पहला ऋणात्मक पूर्णांक खोजने के लिए एक प्रोग्राम बनाना है . हम पहले ऋणात्मक संख्या को प्रिंट करेंगे यदि यह मौजूद है अन्यथा 0 प्रिंट करें, यह दर्शाता है कि कोई नकारात्मक मौजूद नहीं है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

Input: arr[] = {-2, 2, -1, 4, 3, -6}, k = 2
Output: -2, -1, -1, 0, -6

स्पष्टीकरण -

Size of window k = 2,
{-2, 2}, first negative is -2
{2, -1}, first negative is -1
{-1, 4}, first negative is -1
{4, 3}, first negative is 0 (no negative exists)
{3, -6}, first negative is -6

समाधान दृष्टिकोण

समस्या को हल करने का एक सरल तरीका है arr [] आकार की खिड़कियों को बनाना। और प्रत्येक विंडो में पहला ऋणात्मक पूर्णांक ढूंढ़कर प्रिंट करें।

समाधान एक भोला है जो ऑपरेशन करने के लिए दो नेस्टेड लूप का उपयोग करता है। इसलिए समाधान की समय जटिलता O(n*k) क्रम की है।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <iostream>
using namespace std;
void findFirstNegIntWindowK(int arr[], int n, int k){
   bool negFound;
   for (int i = 0; i<(n-k+1); i++)
   {
      negFound = false;
      for (int j = 0; j<k; j++)
      {
         if (arr[i+j] < 0)
         {
            cout<<arr[i+j]<<"\t";
            negFound = true;
            break;
         }
      }
      if (!negFound)
         cout<<"0\t";
   }
}
int main(){
   int arr[] = {-2, 2, -1, 4, 3, -6};
   int n = sizeof(arr)/sizeof(arr[0]);
   int k = 2;
   cout<<"First negative integer in each with of size "<<k<<" is \n";
   findFirstNegIntWindowK(arr, n, k);
   return 0;
}

आउटपुट

First negative integer in each with of size 2 is
-2 -1 -1 0 -6

समस्या को हल करने का एक अन्य तरीका स्लाइडिंग विंडो . जैसी अवधारणा का उपयोग करना है . इसके लिए, हम एक डिक्यू तैयार करेंगे (एक डबल-एंडेड कतार) आकार k की विंडो के सभी तत्वों के लिए k आकार की। हम शुरू से ही ऐरे को ट्रेस करना शुरू करेंगे और तत्व को आकार k के डीक्यू में भरना शुरू करेंगे। और फिर, सरणी के प्रत्येक तत्व के लिए, हम एक तत्व को अंत से हटा देंगे और एक तत्व को दूसरे में जोड़ देंगे। प्रत्येक स्लाइड की गई विंडो के लिए हम पहली ऋणात्मक संख्या ढूंढेंगे और प्रिंट करेंगे। ऋणात्मक संख्या ज्ञात करने के लिए हम जाँच करेंगे कि हटाई गई संख्या खिड़की की पहली ऋणात्मक संख्या है या नहीं, यदि हाँ तो हम पहले ऋणात्मक संख्या के लिए अगले तत्वों की जाँच करेंगे अन्यथा नहीं।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <bits/stdc++.h>
using namespace std;
void findFirstNegIntWindowK(int arr[], int n, int k){
   deque<int> windowKsize;
   int i = 0;
   for (; i < k; i++)
      if (arr[i] < 0)
         windowKsize.push_back(i);
   for (; i < n; i++){
      if (!windowKsize.empty())
         cout<<arr[windowKsize.front()]<<"\t";
      else
         cout<<"0\t";
         while ( (!windowKsize.empty()) && windowKsize.front() < (i - k + 1))
           windowKsize.pop_front();
         if (arr[i] < 0)
            windowKsize.push_back(i);
   }
   if (!windowKsize.empty())
      cout<<arr[windowKsize.front()]<<" \t";
   else
      cout<<"0\t";
}
int main(){
   int arr[] = {-2, 2, -1, 4, 3, -6};
   int n = sizeof(arr)/sizeof(arr[0]);
   int k = 2;
   cout<<"First negative integer in each with of size "<<k<<" is \n";
   findFirstNegIntWindowK(arr, n, k);
   return 0;
}

आउटपुट

First negative integer in each with of size 2 is
-2 -1 -1 0 -6

  1. C++ में दिए गए योग के साथ अधिकतम आकार का उपसमुच्चय

    समस्या कथन एन तत्वों और योग की एक सरणी को देखते हुए। हमें अधिकतम आकार के सबसेट का आकार खोजने की जरूरत है जिसका योग दिए गए योग के बराबर है उदाहरण यदि इनपुट सरणी arr ={ 2, 3, 5, 10} और योग =20 है तो आउटपुट 4 के रूप में होगा - 2 + 3 + 5 + 10 =20 जो दिए गए योग के बराबर है एल्गोरिदम हम इस समस्या को ह

  1. C++ में सेट के दिए गए आकार के सभी सबसेट प्रिंट करें

    इस समस्या में, हमें एक सरणी दी जाती है और हमें दिए गए आकार r के सभी सबसेट को प्रिंट करना होता है जिसे सरणी के तत्व का उपयोग करके बनाया जा सकता है। आइए विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं - Input: array = {3, 5, 6} r = 2 Output: 3 5 3 6 5 6 इस समस्या में, हमें सरणी की संख्याओं के स

  1. C++ में आकार K के M गैर-अतिव्यापी उप-सरणी का अधिकतम योग

    समस्या कथन एक सरणी और दो संख्या M और K को देखते हुए। हमें सरणी में K (गैर-अतिव्यापी) आकार के अधिकतम M उप-सरणी का योग खोजने की आवश्यकता है। (सरणी का क्रम अपरिवर्तित रहता है)। K सबअरे का आकार है और M सबअरे की गिनती है। यह माना जा सकता है कि सरणी का आकार m*k से अधिक है। यदि कुल सरणी आकार k का गुणज नही