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

JavaScript में दिए गए नंबर के बराबर योग वाले सभी सबऐरे ढूंढें (स्लाइडिंग विंडो एल्गोरिदम)


हमें नंबर्स का एक ऐरे और एक नंबर दिया गया है; हमारा काम एक फ़ंक्शन लिखना है जो उन सभी सब ऐरे का एक ऐरे लौटाता है जो दूसरे आर्गुमेंट के रूप में प्रदान किए गए नंबर तक जुड़ते हैं।

उदाहरण के लिए:

const arr = [23, 5, 1, 34, 12, 67, 9, 31, 6, 7, 27];
const sum = 40;
console.log(requiredSum(arr, sum));

निम्न ऐरे आउटपुट करना चाहिए:

[ [ 5, 1, 34 ], [ 9, 31 ], [ 6, 7, 27 ] ]

क्योंकि इन 3 सब ऐरे में से प्रत्येक का योग 40 है।

स्लाइडिंग विंडो एल्गोरिदम (रैखिक समय)

यह एल्गोरिदम ज्यादातर तब उपयोग किया जाता है जब हमें एक ऐरे के भीतर सबऐरे / स्ट्रिंग के भीतर सबस्ट्रिंग ढूंढना होता है जो कुछ मानदंडों को पूरा करते हैं। और यह समस्या स्लाइडिंग विंडो एल्गोरिदम के लिए एक आदर्श उम्मीदवार है।

स्लाइडिंग विंडो एल्गोरिदम वही है जो इसका नाम सुझाता है, हम एक विंडो बनाते हैं जो मूल ऐरे का एक सबऐरे के अलावा कुछ नहीं है। यह विंडो बढ़ने या घटने से स्थिरता हासिल करने की कोशिश करती है।

स्थिरता से हमारा मतलब समस्या में निर्दिष्ट शर्त है (जैसे यहां एक विशिष्ट नंबर तक जोड़ना)। एक बार यह स्थिर हो जाने पर हम विंडो को रिकॉर्ड करते हैं और इसे स्लाइड करना जारी रखते हैं। आम तौर पर, 90% समस्याओं में, हम विंडो को बाएं से शुरू करते हैं और इसे तब तक स्लाइड करते रहते हैं जब तक इसका अंत ऐरे/स्ट्रिंग के अंत तक नहीं पहुंच जाता।

आइए कोड को देखें ताकि हम स्लाइडिंग विंडोज एल्गोरिदम से अधिक परिचित हो सकें।

उदाहरण

const arr = [23, 5, 1, 34, 12, 67, 9, 31, 6, 7, 27];
const sum = 40;
const findSub = (arr, sum) => {
  const required = [];
  for(let start = 0, end = 0, s = 0; end <= arr.length || s > sum ; ){
    if(s < sum){
      s += arr[end];
      end++;
    }else if(s > sum){
      s -= arr[start];
      start++;
    }else{
      required.push(arr.slice(start, end));
      s -= arr[start];
      s += arr[end];
      start++;
      end++;
    };
  };
  return required;
};
console.log(findSub(arr, sum));

start और end वेरिएबल्स ऐरे में विभिन्न बिंदुओं पर विंडो की शुरुआती और अंतिम स्थितियों को दर्शाते हैं।

प्रारंभ में दोनों 0 से शुरू हुए, फिर हमने विंडो का आकार बढ़ाया यदि आवश्यक योग दिए गए योग से कम था, विंडो का आकार घटाया यदि यह अधिक था और यदि किसी बिंद पर दोनों योग बराबर हुए, तो हमने उस सबऐरे को आवश्यक ऐरे में पुश किया। और विंडो को यूनिट दूरी से दाएं ले गए।

आउटपुट

कंसोल में इस कोड का आउटपुट होगा:

[ [ 5, 1, 34 ], [ 9, 31 ], [ 6, 7, 27 ] ]

  1. - C++ में समान संख्या में 1's और 0's वाले सबएरे की गिनती

    हमें एक सरणी arr[] दी गई है जिसमें केवल 0s और 1s हैं। लक्ष्य arr[] के उन सभी सबएरे की गिनती करना है जिनमें सभी में 0s और 1s की घटनाएं समान हों। यदि सरणी [1,0,0] है। सबएरे केवल [1,0] होगा। उदाहरण सहित समझ इनपुट - arr[] = { 0, 0, 1, 1, 1, 0 }; आउटपुट - समान संख्या में 1s और 0s वाले सबएरे की संख्या:

  1. - C++ में योग शून्य वाले सभी उपसरणी (Subarrays) प्रिंट करें

    इस समस्या में, हमें पूर्णांक मानों की एक सरणी दी गई है और हमें इस सरणी से उन सभी उपसरणी को प्रिंट करना है जिनका योग 0 के बराबर है। विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं, इनपुट: सरणी = [-5, 0, 2, 3, -3, 4, -1] आउटपुट: इंडेक्स 1 से 4 तक उपसरणी का योग 0 है। इंडेक्स 5 से 7 तक उपसरणी का यो

  1. - पायथन में न्यूनतम संचालन से समान योग वाली सरणियाँ ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास nums1 और nums2 नामक दो सरणियाँ हैं। सरणियों में मान 1 और 6 (सम्मिलित) के बीच हैं। एक संचालन में, हम किसी भी सरणी में किसी भी मान को 1 और 6 के बीच किसी भी मान में अद्यतन कर सकते हैं। हमें nums1 में मानों का योग nums2 में मानों के योग के बराबर बनाने के लिए आवश्यक न्यूनतम संचालनों