सवाल को समझना (Problem Understanding)
हमें एक integer array nums दिया गया है, जिसका आकार n है। हमें एक answer array return करना है जहाँ हर answer[i] में, nums[i] को छोड़कर बाकी सभी elements का product होगा।
Important Constraint: हमें डिवीज़न ऑपरेटर (/) का उपयोग नहीं करना है।
Example:
- Input:
nums = [1, 2, 3, 4] - Output:
[24, 12, 8, 6]answer[0] = 2 · 3 · 4 = 24answer[1] = 1 · 3 · 4 = 12answer[2] = 1 · 2 · 4 = 8answer[3] = 1 · 2 · 3 = 6
1. ब्रूट फोर्स अप्रोच (O(n²) टाइम, O(1) स्पेस)
यह सबसे सीधा तरीका है, लेकिन यह large inputs (जैसे n = 10⁵) के लिए Time Limit Exceeded (TLE) देगा।
तरीका:
- Outer loop (
i) हर index पर जाएगा। - Inner loop (
j) पूरे array को traverse करेगा। - अगर
i ≠ j, तो हमnums[j]को product में multiply करेंगे। - Inner loop खत्म होने पर product को
answer[i]में store करेंगे।
Pseudo Code:
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int> answer(n, 1);
for (int i = 0; i < n; i++) {
int product = 1;
for (int j = 0; j < n; j++) {
if (i != j) {
product *= nums[j];
}
}
answer[i] = product;
}
return answer;
}
Time Complexity: O(n²) Space Complexity: O(1) (सिर्फ output array को छोड़कर)
2. ऑप्टिमल अप्रोच: प्रीफिक्स और सफिक्स प्रॉडक्ट (O(n) टाइम, O(n) स्पेस)
यह तरीका पिछले वाले से बेहतर है, लेकिन इसमें extra space लगता है।
कोर आइडिया:
answer[i]= (i से पहले के सभी elements का product) · (i के बाद के सभी elements का product)- इसे हम दो arrays में store कर सकते हैं:
- प्रीफिक्स प्रॉडक्ट array:
prefix[i]=nums[0]सेnums[i-1]तक का product। - सफिक्स प्रॉडक्ट array:
suffix[i]=nums[i+1]सेnums[n-1]तक का product।
- प्रीफिक्स प्रॉडक्ट array:
विजुअलाइज़ेशन:
मान लीजिए nums = [1, 2, 3, 4]
Prefix Array Calculation (Left to Right):
prefix[0] = 1(i=0 से पहले कोई element नहीं)prefix[1] = prefix[0] · nums[0] = 1 · 1 = 1prefix[2] = prefix[1] · nums[1] = 1 · 2 = 2prefix[3] = prefix[2] · nums[2] = 2 · 3 = 6
इसलिए, prefix = [1, 1, 2, 6]
Suffix Array Calculation (Right to Left):
suffix[3] = 1(i=3 के बाद कोई element नहीं)suffix[2] = nums[3] · suffix[3] = 4 · 1 = 4suffix[1] = nums[2] · suffix[2] = 3 · 4 = 12suffix[0] = nums[1] · suffix[1] = 2 · 12 = 24
इसलिए, suffix = [24, 12, 4, 1]
Final Answer Calculation:
answer[0] = prefix[0] · suffix[0] = 1 · 24 = 24answer[1] = prefix[1] · suffix[1] = 1 · 12 = 12answer[2] = prefix[2] · suffix[2] = 2 · 4 = 8answer[3] = prefix[3] · suffix[3] = 6 · 1 = 6
Pseudo Code:
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int> prefix(n, 1), suffix(n, 1), answer(n);
// Prefix product
for (int i = 1; i < n; i++) {
prefix[i] = prefix[i - 1] * nums[i - 1];
}
// Suffix product
for (int i = n - 2; i >= 0; i--) {
suffix[i] = suffix[i + 1] * nums[i + 1];
}
// Final answer
for (int i = 0; i < n; i++) {
answer[i] = prefix[i] * suffix[i];
}
return answer;
}
Time Complexity: O(n) Space Complexity: O(n) (दो extra arrays के लिए)
3. मोस्ट ऑप्टिमल अप्रोच: कॉन्सटेंट स्पेस (O(n) टाइम, O(1) स्पेस)
इस अप्रोच में हम extra arrays के बजाय output array का ही prefix storage के लिए उपयोग करते हैं, और suffix को एक single variable की मदद से calculate करते हैं। यह दृष्टिकोण 8 Essential LeetCode Patterns to Solve Coding Problems Efficiently में वर्णित प्रीफिक्स/सफिक्स पैटर्न का एक उत्कृष्ट उदाहरण है।
स्टेप-बाय-स्टेप प्रॉसेस:
स्टेप 1: Output Array में Prefixes Store करें
answer[0] = 1answer[1] = answer[0] · nums[0] = 1 · 1 = 1answer[2] = answer[1] · nums[1] = 1 · 2 = 2answer[3] = answer[2] · nums[2] = 2 · 3 = 6
इसके बाद, answer = [1, 1, 2, 6]
स्टेप 2: Suffix को Multiply करें (Right to Left)
suffix = 1(rightmost element के लिए)i = 2(n-2 से शुरू):suffix *= nums[3] ⇒ 1 · 4 = 4answer[2] *= suffix ⇒ 2 · 4 = 8
i = 1:suffix *= nums[2] ⇒ 4 · 3 = 12answer[1] *= suffix ⇒ 1 · 12 = 12
i = 0:suffix *= nums[1] ⇒ 12 · 2 = 24answer[0] *= suffix ⇒ 1 · 24 = 24
अब answer = [24, 12, 8, 6] जो कि हमारा desired output है।
Pseudo Code:
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int> answer(n, 1);
// Step 1: Calculate prefix products and store in answer
for (int i = 1; i < n; i++) {
answer[i] = answer[i - 1] * nums[i - 1];
}
// Step 2: Calculate suffix products and multiply directly
int suffix = 1;
for (int i = n - 2; i >= 0; i--) {
suffix *= nums[i + 1];
answer[i] *= suffix;
}
return answer;
}
Time Complexity: O(n) Space Complexity: O(1) (सिर्फ output array को छोड़कर)
निष्कर्ष
- ब्रूट फोर्स (O(n²)): समझने में आसान, लेकिन बड़े inputs के लिए अव्यावहारिक।
- प्रीफिक्स/सफिक्स (O(n) टाइम, O(n) स्पेस): एक अच्छा मध्यम रास्ता, लेकिन extra space लगता है।
- कॉन्सटेंट स्पेस (O(n) टाइम, O(1) स्पेस): इंटरव्यू के लिए सबसे इष्टतम समाधान। यह अप्रोच सीखना ज़रूरी है क्योंकि यह एक सामान्य पैटर्न (prefix/suffix computation) को दिखाता है जिसका उपयोग कई अन्य DSA समस्याओं में भी किया जा सकता है, जैसे Mastering Two Pointer & Sliding Window Techniques in DSA Interviews में वर्णित तकनीकों के साथ।
हाय एवरीवन एंड वेलकम टू द कंप्लीट डीएसए सीरीज जिसके अंदर आज हम करने वाले हैं एक इंपॉर्टेंट एरे क्वेश्चन व्हिच इज कॉल्ड
प्रोडक्ट ऑफ एरे एक्सेप्ट सेल्फ अब इसके अलावा अगर हमें कोई और डीएसए कांसेप्ट सीखना है तो वो इसी चैनल के ऊपर इस
प्लेलिस्ट के अंदर हमें अवेलेबल मिल जाएगा हम चाहे तो वहां से जाकर भी सीख सकते हैं नाउ द क्वेश्चन दैट वी आर गोइंग टू सॉल्व
इज कॉल्ड दिस और यह जो सवाल है हमारे पास अवेलेबल है एज प्रॉब्लम नंबर 238 ऑन लीड कोड तो इस तरीके से हमारा सवाल हमारे पास
गिवन है सबसे पहले हम इस सवाल की ब्रूट फोर्स अप्रोच को डिस्कस करेंगे एंड उसके बाद हम इस सवाल की ऑप्टिमल अप्रोच को
डिस्कस करेंगे तो इफ यू आर ऑलरेडी फैमिलियर विद द क्वेश्चन एंड द ब्रूट फोर्स अप्रोच हम डायरेक्टली टाइम स्टंप्स
देखकर अपनी ऑप्टिमल अप्रोच पर भी जाकर स्किप कर सकते हैं सबसे पहले अपने सवाल को समझते हैं सवाल के अंदर हमें एक नंबर्स का
एरे गिवन है जिसका साइज है n के इक्वल और हमें आउटपुट में एक आंसर एरे इन द फॉर्म ऑफ़ अ वेक्टर रिटर्न करना है और इस आंसर
एरे के हर एक आईएट इंडेक्स पर हमारे पूरे एरे का प्रोड ट स्टोर्ड होगा एक्सेप्ट फॉर द नंबर जो उस आईएट इंडेक्स पर अवेलेबल है
जैसे फॉर एग्जांपल अगर हमारे पास यह नंबर्स एरे गिवन है तो अगर हमें इसका i = 0 का आंसर निकालना है तो दैट इज गोइंग टू
बी इक्वल टू कि हमारे पूरे एरे में i = 0 को छोड़कर बाकी सारे नंबर्स का क्या प्रोडक्ट निकलेगा दिस इज गोइंग टू बी
इक्वल टू 24 तो हम 24 को यहां पर स्टोर कराएंगे सिमिलरली अगर हमें इसका i = 2 का आंसर कैलकुलेट करना है तो i = 2 वाली
प्लेस पे आंसर में क्या स्टोर होगा वो होगा पूरे पूरे के पूरे नंबर्स का प्रोडक्ट एक्सेप्ट फॉर दिस i इ इक्वल ट 2
वाला एलिमेंट तो 1 * 2 * 4 यानी 8 के इक्वल तो इस तरीके से हम अपने आंसर एरे को बिल्ड कर रहे होंगे अब सबसे पहले जब हम इस
सवाल को देखेंगे तो हमारे दिमाग में बहुत एक आसान सी अप्रोच है जो अभी तक आपके दिमाग में हिट कर जानी चाहिए कि इस सवाल
को सॉल्व करने के लिए व्हाट विल आई डू हम नंबर्स एरे के सारे के सारे नंबर्स का फाइनल जो प्रोडक्ट होता है वो कैलकुलेट कर
सकते हैं जैसे 1 * 2 * 3 * 4 हमारे पास हो जाता है 24 के इक्वल अब अगर मुझे अपना आंसर एरे बिल्ड करना है तो आंसर एरे में
एक वैल्यू रोत इंडेक्स पे आएगी एक फर्स्ट इंडेक्स पे आएगी एक सेकंड इंडेक्स पे आएगी एक थर्ड इंडेक्स पे आएगी तो जब हम जीरो इथ
इंडेक्स वाली वैल्यू निकाल रहे हैं तो सिंपली 24 को वन से डिवाइड कर देंगे तो ये हो जाएगा 24 के इक्वल जब हम फर्स्ट
इंडेक्स वाली वैल्यू निकाल रहे हैं तो 24 को सिंपली टू से डिवाइड कर देंगे तो ये वैल्यू हो जाएगी 12 के इक्वल जब हम थर्ड
इंडेक्स वाली वैल्यू निकाल रहे हैं तो 24 को थ से डिवाइड कर देंगे ये वैल्यू हो जाएगी एट के इक्वल और जब फोर्थ वैल्यू
निकाल रहे हैं तो 24 को फर से डिवाइड कर देंगे ये वैल्यू हो जाएगी सक्स के इक्वल तो इस तरीके से हमारे पास सारी आंसर के
अंदर वो वैल्यूज आ जाएंगी जो हमारे पास रिक्वायर्ड है और हम अपने आंसर को बहुत ही आसानी से कैलकुलेट कर लेंगे क्योंकि हमें
सिर्फ उसी नंबर को छोड़ना था जिस इंडेक्स की वैल्यू को हम स्टोर करा रहे हैं तो हमने क्या किया पूरे के पूरे प्रोडक्ट को
निकालकर सिर्फ उसी वैल्यू से हमने डिवाइड कर दिया व्हिच इज प्रिटी स्ट्रेट फॉरवर्ड लेकिन सवाल के अंदर ट्विस्ट ये है कि वी
आर नॉट अलाउड टू यूज़ द डिवीजन ऑपरेटर हमें डिवाइड का ये जो ऑपरेशन है ये परफॉर्म ही नहीं करना है हमें सिर्फ दूसरे
ऑपरेशंस की हेल्प से इस सवाल को सॉल्व करना है तो सबसे पहले हम इस सवाल को ब्रूट फर्स अप्रोच से सॉल्व करेंगे ब्रूट फोर्स
कहने का मतलब है कि हमारी जो अप्रोच है उसमें हम n स् टाइम वाली एक अप्रोच डिस्कस करेंगे फिर ऑप्टिमाइज करेंगे उस अप्रोच को
बेस्ड ऑन दिस अदर कंस्ट्रेंट कि हमारी जो एल्गोरिदम है वो बिग ऑफ एंड टाइम में रन करनी चाहिए प्लस उसमें बिग ऑफ वन स्पेस
लगनी चाहिए तो इस अप्रोच को हम अपनी ऑप्टिमल अप्रोच में डिस्कस करेंगे सबसे पहले ब्रूट फोर्स की बात करते हैं हमें
मिल गया कि सवाल के अंदर हमें डिवीजन ऑपरेटर अलाउड ही नहीं है तो हम सिर्फ मल्टीप्लाई कर सकते हैं इफ आई विजुलाइज
माय एरे लाइक दिस तो इसके अंदर हमारे पास 1 2 3 4 4 एलिमेंट्स हैं मुझे चाहिए कि मुझे एक अपना आंसर कैलकुलेट करना है जिसके
अंदर हर एक इंडेक्स पर ये जो प्रोडक्ट कैलकुलेट हो उसके अंदर इसके अलावा सारी की सारी वैल्यूज आनी चाहिए तो उसके लिए हम
क्या कर सकते हैं अपने ओरिजिनल एरे के एक-एक इंडेक्स पर ट्रेवल कर सकते हैं जब हम रो एथ इंडेक्स पे आए तो इसका आंसर क्या
होगा इसका आंसर होगा बाकी पूरे एरे का प्रोडक्ट निकाल लो तो हम क्या कर सकते हैं एक और सेकंड नेस्टेड लूप चला देंगे जिसमें
हम बाकी के बचे हुए पूरे के पूरे एरे के नंबर्स का प्रोडक्ट निकाल कर यहां पर स्टोर करा देंगे व्हिच इज़ गोइंग टु बी
इक्वल टु इन तीनों का प्रोडक्ट इज़ गोइंग टु बी इक्वल ट 24 उसके बाद हम अपने इंडेक्स को कर देंगे अपडेट i = 1 हो जाएगा
जब i = 1 होगा तो अब हमारे लिए काम रह गया कि हम इसे हटाकर बाकी पूरे के पूरे एरे के सारे एलिमेंट्स का प्रोडक्ट निकाल लें तो
इन तीनों का प्रोडक्ट निकालकर हम यहां पर स्टोर कर देंगे व्हिच इज़ गोइंग टु बी इक्वल टू 12 तो इस तरीके से एक-एक इंडेक्स
पर पर आगे बढ़ते बढ़ते मुझे क्या करना है जैसे भी किसी भी इंडेक्स पर गए अब बाकी के पूरे के पूरे एरे पर लूप चला दो बस इस
एलिमेंट को काउंट नहीं करना आंसर के अंदर बाकी सारे नंबर्स का प्रोडक्ट ले लेना है और उसे अपने आंसर के अंदर स्टोर कर लेना
है सो यहां पर हमारे पास स्टोर हो जाएगा आकर एट तो इसका लॉजिक क्या होगा लॉजिक यही होगा कि हम सिंपली एक तो आउटर लूप लगाएंगे
अपने इस इंडेक्स को अपडेट करने के लिए तो ये ज़ीरो से स्टार्ट होगा हम फिर वन पर जाएंगे इंडेक्स टू पर जाएंगे इंडेक्स थ्री
पर जाएंगे और पूरे के पूरे एरे के सारे के सारे एलिमेंट्स को ट्रैवर्स करते रहेंगे और अपने इस आंसर को बिल्ड करते रहेंगे
आंसर क्या हो जाएगा आंसर को हम इनिश इइ कर सकते हैं एज अ वेक्टर क्योंकि क्वेश्चन के अंदर एज अ रिटर्न टाइप हमें एक वेक्टर को
रिटर्न करना है तो वेक्टर ऑफ इंटी जर ले लेंगे इसको आंसर कह देते हैं यहां पर i = 0 से स्टार्ट कर सकते हैं i < n i + है जब
तक अब हर एक इंडेक्स के लिए मुझे चाहिए कि अब मैं पूरे के पूरे एरे के ऊपर एक नेस्टेड लूप लगाऊं और बस इस इंडेक्स की
वैल्यू को छोड़कर बाकी सबका प्रोडक्ट कैलकुलेट कर लूं तो उसका लॉजिक भी बहुत स्ट्रेट फॉरवर्ड है कि मुझे सिंपली क्या
करना है j = 0 से लेकर j < n तक लेकर जाएंगे j+ + और सारे के सारे नंबर्स का प्रोडक्ट
कैलकुलेट करना है तो एक प्रोडक्ट वेरिएबल ले लेते हैं जिसको इनिश इज कर देंगे वन के साथ प्रोडक्ट के अंदर अपने नंबर्स ऑफ j
का मतलब अगर इस इंडेक्स पर है तो मुझे फिर एक और पूरा लूप लगाना है अपने पूरे के पूरे एरे पर जिसमें सारे जेस का मुझे
प्रोडक्ट लेना है एक्सेप्ट जब मेरा i j के इक्वल है i अगर j के इक्वल है मतलब मैं उसी इंडेक्स पर खड़ी हूं इसका बस वैल्यू
ऐड नहीं करना प्रोडक्ट में बाकी सारे नंबर्स की वैल्यू ऐड करनी है तो यहां पर एक हम कंडीशन लगा सकते हैं व्हिच इज़ कि
इफ माय i इज नॉट इक्वल टू j तो उस केस में मुझे प्रोडक्ट के अंदर अपने नंबर्स ऑफ़ j की वैल्यू को ऐड करना है और फाइनली ये जो
भी मेरी प्रोडक्ट की वैल्यू आएगी उसको हम स्टोर करा देंगे आंसर में तो यहां पर इस लूप के खत्म होने के बाद आंसर ऑफ़ i इज
गोइंग टू बी इक्वल टू आवर प्रोडक्ट जो हमने कैलकुलेट किया है तो इस तरीके से नेस्टेड लूप्स की हेल्प से बिग ऑफ n स्
टाइम कॉम्प्लेक्टेड क्ट ऑफ़ एरे x सेप सेल्फ वाली प्रॉब्लम को सॉल्व कर सकते हैं विदाउट यूजिंग द डिवीजन ऑपरेटर क्योंकि
हमने सिर्फ मल्टीप्लिकेशन को यहां पर यूज किया है एक बार इसे जल्दी से हम कोड भी कर लेते हैं बिकॉज ये बहुत सिंपल अप्रोच होने
वाली है एंड आई डोंट थिंक कि इसको यूज करने में हमने खास कोई दिमाग लगाया है तो कोड काफी सिंपल होने वाला है सबसे पहले हम
वेक्टर ऑफ इंटी जर बना लेंगे अपने आंसर को और चाहे तो आंसर को हम शुरुआत से इनिश आइज भी कर सकते हैं विद द नम्स डॉट साइज n
साइज का हमें आंसर वेक्टर चाहिए एंड इसे इनिश इज कर सकते हैं वन वैल्यू के साथ फिर हम अपना आउटर लूप लगाएंगे i इ 0 से लेकर i
< n इन फैक्ट लेट मी जस्ट टेक माय n वैल्यू एज नम्स डॉट साइज तो यहां पर हमारे पास n आ जाएगा यहां पर n आ जाएगा अब हम
चाहे तो एक प्रोडक्ट नाम का वेरिएबल ले सकते हैं इनिश इइ ज्ड विद वन एंड j इक्व 0 से लेकर j < n j+ + तक जाएगा हमें हर बार
क्या करना है हमें अपने प्रोडक्ट के अंदर मल्टीप्लाई इक्वल टू करना है नम्स ऑफ j को पर यह चीज हमें तभी करनी है जब हमारा नम्स
ऑफ j के लिए हमारी i की वैल्यू j के इक्वल नहीं है क्योंकि जो हमारा आई इंडेक्स वाली वैल्यू
है उसको हमें प्रोडक्ट के अंदर इंक्लूड नहीं करना और जैसे ही वैल्यू कैलकुलेट हो जाएगी हमारा आंसर ऑफ आ हो जाएगा हमारे
प्रोडक्ट के इक्वल एंड इस तरीके से लास्ट में हम रिटर्न कर सकते हैं अपने आंसर को इनफैक्ट इसके अंदर भी एक और ऑप्टिमाइजेशन
जो हम कर सकते हैं दैट इज कि वी डोंट रियली नीड टू यूज दिस प्रोडक्ट वेरिएबल हम सिंपली यहां पर अपने आंसर ऑफ आई के अंदर
ही डायरेक्ट मल्टीप्लिकेशन कर सकते हैं तो चाहे तो यह वाला असाइनमेंट भी वी कैन रिमूव एंड इस तरीके से वी कैन रन आवर कोड
हमारा कोड हमारे टेस्ट केसेस पर चल जाएगा पर इसकी जो टाइम कॉम्प्लेक्शन इज इक्वल टू n स् एंड दैट इज व्हाई इस सवाल के अंदर
हमारे पास t ही आएगा क्यों क्योंकि हमारे कंस्ट्रेंट्स के अंदर n की वैल्यू लेन इक्वल ू 10 टू द पावर 5 है 10 टू द पा 5
के केस में n स् का कोड कभी भी एक्सेप्ट नहीं होगा उसमें हमारे पास t ही आएगा तो इसीलिए हमें अपनी इस अप्रोच को थोड़ा सा
ऑप्टिमाइज करने की जरूरत है एंड इसे ऑप्टिमाइज करने के लिए अब हम देखने वाले हैं अपनी और ऑप्टिमल अप्रोच
जहां पर हम अपने सेम प्रॉब्लम को सॉल्व करेंगे इन बिग ऑफ एंड टाइम कॉम्प्लेक्शन टाइम कॉम्प्लेक्टेड खें साथ
के साथ हमारे क्वेश्चन के अंदर हमें एक और ऑप्टिमाइजेशन दी है कि क्या हम बिग ऑफ वन एक्स्ट्रा स्पेस में इसको कर सकते हैं तो
बिग ऑफ n टाइम कॉम्प्लेक्शन रखते हुए इस सवाल को सॉल्व करने वाले हैं एंड यहां पर ऑलरेडी हमें
दिया हुआ है कि आउटपुट एरे को हमें अपनी स्पेस कॉम्प्लेक्टेड पुुप एरे तो क्रिएट होगा ही
होगा आंसर एरे क्रिएट होगा ये स्पेस अकाउंट नहीं होगा तो सवाल हमारे पास सेम है कि हमें अपने सारे के सारे एरे के लिए
अपना एक आउटपुट एरे बनाना है जिसके अंदर हर एक इंडेक्स की वैल्यू को छोड़कर बाकी सारे नंबर्स का हमारे पास प्रोडक्ट स्टोर
हो जाए तो इफ दिस इज़ आवर नंबर्स एरे एंड दिस इज़ आवर आंसर एरे तो इसके अंदर सेम साइज का एरे हम रख सकते हैं एंड अब इस
प्रॉब्लम को कैसे हम लीनियर टाइम के अंदर सॉल्व करेंगे अब हमें यह पता है कि हम यहां पर डिवीजन ऑपरेटर को यूज़ नहीं कर
सकते एग्जांपल के लिए आंसर के अंदर अगर मुझे इस इंडेक्स की वैल्यू कैलकुलेट करनी है दिस इज इंडेक्स टू तो इंडेक्स टू की
वैल्यू कैलकुलेट करने के लिए मेरे पास क्या होना चाहिए इंडेक्स टू की वैल्यू कैलकुलेट करने के लिए इस नंबर को छोड़कर
मेरे पास बाकी सारे नंबर्स का प्रोडक्ट होना चाहिए तो क्या मैं कह सकती हूं ये जो प्रोडक्ट मेरे पास होगा अगर मैं इस नंबर
को i = 2 वाले नंबर को छोड़कर लेफ्ट के सारे के सारे नंबर्स का अगर प्रोडक्ट निकाल लूं एंड राइट के सारे के सारे
नंबर्स का अगर प्रोडक्ट निकाल लूं तो मेरे पास मेरा आंसर आ जाएगा मुझे सिंपली क्या करना है ये जो लेफ्ट का प्रोडक्ट है और ये
जो राइट का प्रोडक्ट है इन दोनों वैल्यूज को मुझे मल्टीप्लाई कर देना है और ये मेरा आंसर बन जाएगा तो मेरे पास लेट्स सपोज
लेफ्ट का प्रोडक्ट आ जाएगा 2 के इक्वल राइट का प्रोडक्ट आ जाएगा 4 के इक्वल आंसर हो जाएगा 4 * 2 व्हिच इज इक्वल ट 8 या इसे
एक और इंडेक्स के ऊपर ट्राई करते हैं लेट्स सपोज मुझे कैलकुलेट करना है माय आंसर फॉर इंडेक्स इज इक्वल ट 1 इंडेक्स इज
इक्वल ट 1 के लिए मुझे पता है इस नंबर को छोड़कर मेरे पास अगर लेफ्ट का प्रोडक्ट आ जाए व्हिच इज वन एंड मेरे पास राइट वाले
सारे नंबर्स का प्रोडक्ट आ जाए व्हिच इज़ 12 तो 1 * 12 क्या हो जाएगा 1 * 12 12 हो जाएगा तो तो मेरा आंसर हो जाएगा 12 के
इक्वल तो मुझे पता है लेफ्ट और राइट के जब नंबर्स का प्रोडक्ट कैलकुलेट होगा उसमें ये वाला इंडेक्स तो इंक्लूडेड ही नहीं है
तो ये मेरे आंसर में भी कभी नहीं आएगा तो मेरी जो अप्रोच होने वाली है ऑप्टिमल अप्रोच उसमें मैं किसी ना किसी तरीके से
हर एक इंडेक्स आई के लिए उसके लेफ्ट के सारे नंबर्स का हमें प्रोडक्ट कैलकुलेट करना है व्हिच कुड बी लेफ्ट प्रोडक्ट एंड
राइट के सारे नंबर्स का प्रोडक्ट कैलकुलेट करना है व्हिच कुड बी राइट प्रोडक्ट फॉर द सेक ऑफ सिंपलीसिटी ये जो लेफ्ट प्रोडक्ट
है इसको मैं आपसे प्रीफिक्स कहने वाली हूं ये जो राइट प्रोडक्ट है इसको मैं मैं आपसे सफिक्स कहने वाली हूं प्रीफिक्स का मतलब
होता है जो पहले आता है तो इंडेक्स से पहले आ रही है वैल्यू सफिक्स का मतलब होता है जो बाद में आता है तो आ इंडेक्स के बाद
वाली ये वैल्यू है तो एक तरीके से पहले हमें अपना प्रीफिक्स प्रोडक्ट कैलकुलेट करना है फिर और हमें अपना सफिक्स प्रोडक्ट
कैलकुलेट करना है और हर एक इंडेक्स के लिए अगर मेरे पास ये दोनों वैल्यूज आ गई तो मेरे पास क्या आ जाएगा मेरे पास मेरा आंसर
आ जाएगा अब ऑप्टिमल से भी एक लोअर लेवल की थिंकिंग हमें ये कहती है कि सबसे पहले सारे के सारे नंबर्स का प्रीफिक्स
कैलकुलेट कर लो सारे इंडेक्स के लिए इसमें हमें कितना टाइम लगेगा लेट्स सपोज इसको आंसर की जगह अगर मुझे इसको प्रीफिक्स एरे
बनाना हो प्रीफिक्स एरे कहने का मतलब है कि हर एक इंडेक्स आई के लिए उस इंडेक्स आई से पहले आने वाले सारे एलिमेंट्स का मेरे
पास प्रोडक्ट होना चाहिए तो प्रीफिक्स को कैलकुलेट करने में मुझे कितना टाइम लगेगा मुझे एक सिंपल लूप लगेगा प्रीफिक्स कैसे
कैलकुलेट होगा सबसे पहले हम इस इंडेक्स पर जाएंगे इस इंडेक्स पर जाएंगे तो इससे पहले कोई भी एलिमेंट नहीं आता तो इससे पहले
वाले सारे के सारे एलिमेंट्स का जो सम है या जो प्रोडक्ट है उसे लेट्स सपोज हमने इनिशियलिज्म चाहे तो इसे खाली भी छोड़
सकते हैं अी के लिए उसके बाद नेक्स्ट इंडेक्स पर जाएंगे इस इंडेक्स से पहले आने वाले सारे के सारे नंबर्स का क्या
प्रीफिक्स होने वाला है ये प्रीफिक्स प्रोडक्ट हो जाएगा वन के इक्वल क्योंकि टू से पहले सिर्फ वन आता है और वन का
प्रोडक्ट वन के इक्वल हो जाता है फिर हम नेक्स्ट इंडेक्स पर जाएंगे थ्री से पहले आने वाले सारे नंबर्स का प्रोडक्ट क्या है
ये प्रोडक्ट है टू के इक्वल तो यहां पर आंसर आ जाएगा टू उसके बाद नेक्स्ट इंडेक्स पर जाएंगे फोर से पहले आने वाले सारे
नंबर्स का क्या प्रोडक्ट है दिस इज इक्वल टू सि तो यहां पर हमारे पास आ जाएगा सिक्स तो इस तरीके से एक सिंगल लूप में जाकर हम
पूरे के पूरे अपने प्रीफिक्स प्रोडक्ट को कैलकुलेट कर सकते हैं तो इसमें हमें कितनी टाइम
कॉम्प्लेक्टेड टाइम कॉम्लेक्स टी लगेगी हमने क्या किया हम हर एक इंडेक्स पर जाएंगे हर एक इंडेक्स पर जाएंगे और पहले
वाले सारे नंबर्स का जो भी प्रीफिक्स आया होगा फॉर एग्जांपल अगर हम इस इंडेक्स पर खड़े हैं तो इसका प्रीफिक्स निकालने के
लिए मुझे पूरा लूप लगाने की जरूरत नहीं है सिंपली क्या करो पिछले वाले नंबर का प्रीफिक्स देख लो यहां तक का प्रीफिक्स टू
था मतलब इस नंबर से पहले वाले नंबर्स का प्रोडक्ट टू था उसमें सिंपली एक पहले वाला जो नंबर है यानी थ्री उसको मल्टीप्लाई कर
दो तो हमारे पास नेक्स्ट प्रीफिक्स आ जाएगा व्हिच इज इक्वल टू 6 तो किसी भी नंबर का प्रीफिक्स निकालने के लिए क्या
लूप लगता है किसी भी नंबर का प्रीफिक्स निकालने का जो लूप होगा वो बहुत सिंपल होगा यानी हम i = 1 से स्टार्ट कर सकते
हैं i < n तक जाएंगे i को कर देंगे प्लस प्लस हमने ज़ीरो से स्टार्ट नहीं किया तो हमें क्या करना है एक प्रीफिक्स नाम का हम
एरे बना सकते हैं या एक प्रीफिक्स नाम का वेक्टर बना सकते हैं लेट्स कॉल इट प्रीफिक्स ये जो स्पेस
कॉम्प्लेक्टेड करेंगे तो उसके बारे में वरी करने की जरूरत नहीं है बस फॉर द सेक ऑफ़ सिंपलीसिटी हम अभी समझने की कोशिश कर
रहे हैं अब प्रीफिक्स को कैलकुलेट करने के लिए मुझे पता है किसी भी नंबर का प्रीफिक्स ऑफ i क्या होता है प्रीफिक्स ऑफ
i होता है प्रीफिक्स ऑफ i -1 यानी पुराने सारे नंबर्स का मल्टीप्लिकेशन मल्टीप्ला बाय जो भी नंबर पहले आया था उससे
मल्टीप्लाई कर देंगे तो यह हमारा प्रीफिक्स ऑफ i हो जाएगा इसका एग्जांपल हमने ऑलरेडी देख लिया एक और एग्जांपल देख
लेते हैं फॉर एग्जांपल हम थ्री पर खड़े हैं थ्री का अगर मुझे प्रीफिक्स निकालना है तो पुराने का प्रीफिक्स निकाल लेंगे
मतलब टू का प्रीफिक्स निकाल लेंगे व्हिच इज इक्वल टू 1 और वन के अंदर इस टू की वैल्यू को मल्टीप्लाई कर देंगे तो हम
हमारे पास थ्री का प्रीफिक्स आ जाएगा व्हिच इज इक्वल टू 2 तो इस तरीके से हमने बिग ऑफ n सिंगल लूप लगाकर अपना प्रीफिक्स
कैलकुलेट कर लिया यह हो गया फर्स्ट स्टेप सेकंड स्टेप होगा टू कैलकुलेट द सफिक्स फॉर ऑल नंबर्स हर एक आईए इंडेक्स के लिए
हम उसका सफिक्स निकालेंगे और उसका प्रोसेस भी बिल्कुल सिमिलर होगा जिसमें हमें बिग ऑफ n टाइम कॉम्प्लेक्शन लगेगी सफिक्स
निकालने के लिए मुझे क्या करना पड़ेगा यहां पर इस तरीके से ऐसा ही हम एक और सफिक्स एरे बना लेंगे और सफिक्स निकालने
के लिए इस बार सफिक्स क्या होता है किसी भी आई इंडेक्स के राइट साइड वाले नंबर्स का प्रोडक्ट तो मुझे क्या करना है राइट
साइड वाले नंबर्स का प्रोडक्ट पहले सिर्फ इसका प्रोडक्ट निकाल लो फिर इन दोनों का निकाल लो फिर इन तीनों का निकाल लो फिर इन
चारों का निकाल लो तो ये चीज हम करेंगे बैकवर्ड्स लूप लगाकर सबसे पहले जाएंगे इस इंडेक्स पर इस इंडेक्स के लिए तो कोई
सफिक्स है ही नहीं तो इसको हम खाली छोड़ सकते हैं फिर नेक्स्ट इंडेक्स पर जाएंगे नेक्स्ट इंडेक्स के लिए सफिक्स क्या हो
जाएगा सफिक्स हो जाएगा पुराने वाले की वैल्यू मल्टीप्ला बाय नम्स ऑफ़ i इनफैक्ट हम चाहे तो इस वैल्यू को इनिश कर सकते हैं
विद वन क्योंकि एनीवेज हम पुरानी वैल्यू से मल्टीप्लाई करेंगे जैसे यहां पर भी हमारा जो प्रीफिक्स ऑफ रो है उसको इनिश इज
कर सकते हैं वन के साथ क्योंकि उसकी वैल्यू को हम मल्टीप्लाई कर रहे हैं अपने नम्स ऑफ i -1 से आई होप यह चीज हमें समझ
में आई होगी अगर थोड़ा सा भी कंफ्यूजन हो रहा है तो पॉज करके आप इसके बारे में सोच सकते हैं अपने डायग्राम को ड्रॉ करके
सफिक्स के लिए हमने लास्ट इंडेक्स के सफिक्स को इनिश कर दिया वन के साथ हम अब इस नंबर का जब सफिक्स कैलकुलेट करेंगे तो
इट विल बी दिस वैल्यू मल्टीप्ला बाय दिस वैल्यू यानी फोर के इक्वल फिर जब हम नेक्स्ट वैल्यू का सफिक्स कैलकुलेट करेंगे
तो इट इज गोइंग टू बी दिस वैल्यू मल्टीप्ला बाय दिस वैल्यू व्हिच इज गोइंग टू बी इक्वल टू 12 नेक्स्ट वैल्यू का
सफिक्स कैलकुलेट करेंगे तो इट इज गोइंग टू बी दिस वैल्यू मल्टीप्ला बाय दिस वैल्यू यानी 24 के इक्वल तो मेरा सफिक्स एरे कुछ
ऐसा बनेगा एंड प्रीफिक्स वाला अगर अपना एरे ड्रॉ करें तो प्रीफिक्स वाला एरे कुछ ऐसा दिखाई देगा दिस वाज प्रीफिक्स जिसके
अंदर हमारे पास वन वैल्यू है उसके बाद एक और वन आता है उसके बाद वी हैव टू एंड उसके बाद वी हैव सिक्स तो इस तरीके से हमारा
प्रीफिक्स कैलकुलेट हुआ था इस तरीके से हमारा सफिक्स कैलकुलेट हुआ है सफिक्स का भी एक बार जल्दी से सूडो कोड लिख लेते हैं
सफिक्स के लिए हमें रिवर्स लूप लगाना है जो i = n - 1 से स्टार्ट होगा या n - 2 से इसको स्टार्ट कर सकते हैं क्योंकि n - 1
का सफिक्स तो हमें ऑलरेडी पता है क्या होगा हमेशा वन के इक्वल होगा क्योंकि इसको कभी यूज़ ही नहीं करने वाले तो सफिक्स ऑफ
n - 1 इज गोइंग टू बी इक्वल 1 n - 2 से स्टार्ट करेंगे i > = 0 i को कर देंगे हर बार माइनस माइनस हमेशा सफिक्स की वैल्यू
क्या होगी सफिक्स ऑफ i इज गोइंग टू बी सफिक्स ऑफ i + 1 मल्टीप्ला बाय नम्स ऑफ i + 1 क्योंकि इस बार रिवर्स लूप है तो ये
पहले प्रीफिक्स के लिए i -1 i -1 होता था सफिक्स के लिए i + 1 i + 1 हो रहा है क्योंकि हम पिछली वाली दो वैल्यूज को
मल्टीप्लाई कर रहे हैं जैसे फॉर एग्जांपल अगर मुझे इसका सफिक्स निकालना है तो इट इज़ गोइंग टू बी + 1 वाली सफिक्स वाली
वैल्यू एंड + 1 वाली नम्स वाली वैल्यू दोनों का मल्टीप्लिकेशन मेरा सफिक्स हो जाएगा तो ये जो सफिक्स का कोड आया है दिस
इज आल्सो लीनियर टाइम कॉम्लेक्स टी प्रीफिक्स का जो कोड आया दिस इज़ आल्सो लीनियर टाइम कॉम्लेक्स टी अब एक बार हमने
प्रीफिक्स एंड सफिक्स को कैलकुलेट कर दिया तो थर्ड स्टेप हमारे लिए होता है कि हम एक लूप लगाकर अपने आंसर को कैलकुलेट करें
आंसर एट इंडेक्स i क्या होता है आंसर एट इंडेक्स i होता है प्रीफिक्स ऑफ़ i मल्टीप्ला बाय सफिक्स ऑफ i क्योंकि पहले
की वैल्यूज और बाद वाली वैल्यूज को ही मुझे सिंपली मल्टीप्लाई करना है तो एक बार उसे भी देख लेते हैं ये हमारी सारी की
सारी सफिक्स वैल्यूज हो गई हर एक इंडेक्स के लिए ये हमारी सारी की सारी प्रीफिक्स वैल्यूज हो गई हर एक इंडेक्स के लिए
फर्स्ट इंडेक्स के लिए वैल्यू हो जाएगी 24 * 1 यानी 24 के इक्वल सेकंड इंडेक्स के लिए वैल्यू हो जाएगी 12 * 1 यानी 12 के
इक्वल थर्ड इंडेक्स के लिए वैल्यू हो जाएगी 4 * 2 यानी एट के इक्वल फोर्थ इंडेक्स के लिए वैल्यू हो जाएगी 1 * 6
यानी 6 के इक्वल तो 24 12 8 एंड 6 24 12 8 एंड 6 यही था हमारा फाइनल आंसर तो इस अप्रोच में हमें टाइम कॉम्लेक्स टी कितनी
लगेगी पहले प्रीफिक्स कैलकुलेट करेंगे बिग ऑफ n में फिर सफिक्स कैलकुलेट करेंगे बिग ऑफ n में फिर आंसर का जो लूप है वो बहुत
आसान होने वाला है डायरेक्टली कोड करेंगे यह भी बिग ऑफ n में तो तीन बिग ऑफ n के हमने लूप्स लगाए तो बिग ऑफ 3n हमारी टाइम
कंपलेक्सिटी होगी व्हिच विल अमाउंट टू बिग ऑफ़ n टाइम कॉम्लेक्स टी अभी स्पेस कॉम्प्लेक्शन ऑप्टिमाइज नहीं है क्योंकि
स्पेस के लिए हमने सफिक्स एरे एंड प्रीफिक्स एरे एक्स्ट्रा यूज़ किया है तो अभी हमारी स्पेस
कॉम्प्लेक्शन भी बिग ऑफ n की है तो स्पेस कॉम्प्लेक्शन को कैसे ऑप्टिमाइज करना है वो एक बार कोड लिखने के बाद हम सीखेंगे
सबसे पहले हम अपना कोड लिखते हैं इस अप्रोच का जिसके अंदर व्हाट वी विल डू आंसर तो हमें कैलकुलेट करना ही था ही उसके
साथ में वी आर आल्सो गोइंग टू कैलकुलेट और क्रिएट टू मोर वेक्टर्स कॉल्ड प्रीफिक्स एंड
सफिक्स तो यह हमारा प्रीफिक्स हो जाएगा एंड यह हमारा सफिक्स हो जाएगा इसको n से इनिश इज कर सकते हैं वन के साथ इसको भी वन
वैल्यू के साथ सबसे पहले अपना प्रीफिक्स कैलकुलेट करेंगे प्रीफिक्स के लिए इंटी जर i इक्व 1 से स्टार्ट कर सकते हैं i < n +
हमें पता है प्रीफिक्स ऑफ i इज गोइंग टू बी प्रीफिक्स ऑफ i - 1 मल्टीप्ला बाय नम्स ऑफ i -1 सिमिलरली इसी तरीके से हम सफिक्स
कैलकुलेट कर लेंगे सफिक्स भी हमें पता है फॉर इंटी जर i = n - 2 क्योंकि लास्ट x के लिए ऑलरेडी कैलकुलेटेड है हर बार अपने i
को हम कर देंगे माइनस माइनस एंड सफिक्स ऑफ i इ इक्व ट सफिक्स ऑफ बाद वाली वैल्यू i + 1 मल्टीप्ला बाय नम्स ऑफ i + 1 एंड फाइनली
सिमिलर लूप हम चलाने वाले हैं अपने आंसर के लिए तो इस लूप को वी आर गोइंग टू स्टार्ट इट फ्रॉम ज़ीरो आंसर ऑफ़ i इज
गोइंग टू बी इक्वल टू हमारा प्रीफिक्स ऑफ़ i मल्टीप्ला बाय सफिक्स ऑफ i एंड फाइनली हम रिटर्न कर
देंगे अपने आंसर को तो तीन लूप्स हमने यूज़ किए प्रीफिक्स ब बिग ऑफ n का लूप है सफिक्स भी बिग ऑफ n का लूप है आंसर
कैलकुलेशन भी बिग ऑफ n का लूप है ओवरऑल बिग ऑफ़ एंड टाइम कॉम्लेक्स टी स्पेस कॉम्प्लेक्शन में ये दोनों वेक्टर्स हमने
एडिशनल यूज़ किए हैं तो स्पेस कॉम्लेक्स टी भी अभी बिग ऑफ n है इसको भी एक बार रन करते हैं एंड इसमें भी हमारे सारे टेस्ट
केसेस पास हो जाएंगे बस यहां पर स्पेस कप्लेक्स टी का इशू आएगा यह कोड हमारे लिए सक्सेसफुली सबमिट हो जाएगा लेकिन क्योंकि
हमें स्पेस कॉम्प्लेक्टेड करना है तो उस कंडीशन को हम कैसे ऑप्टिमाइज करें तो नेक्स्ट और सबसे जो
इंपॉर्टेंट स्टेप है वो है स्पेस कॉम्प्लेक्शन का जिसको अब हम करने वाले हैं अब हमने देखा कि ऑलरेडी हमें पता है
कि अपनी टाइम कॉम्प्लेक्टेड सफिक्स कैलकुलेट करने की जरूरत है हर एक इंडेक्स के अंदर पर यहां
पर मेरा जो नेक्स्ट सवाल आएगा जो हमें सोचने की जरूरत है क्या इस प्रीफिक्स और सफिक्स को मुझे एडिशनल किसी वेक्टर के
अंदर स्टोर कराने की एक्चुअली जरूरत थी क्या इसको स्टोर कराना जरूरी था या सिंपली बस इसको हम कैलकुलेशन में यूज़ कर सकते थे
कहने का मतलब है कि मुझे पता है एट द एंड क्या करना है मुझे एट दी एंड मुझे आंसर ऑफ आ को करना है प्रीफिक्स ऑफ आ मल्टीप्ला
बाय सफिक्स ऑफ i ये चीज मुझे ऑलरेडी पता है और मुझे यह भी पता है कि मेरा प्रीफिक्स क्या होता है अभी सिर्फ इस
प्रीफिक्स के ऊपर एक बार फोकस करते हैं मुझे पता है मेरा प्रीफिक्स क्या होता है इस वैल्यू के लिए मेरा प्रीफिक्स वन होगा
इस वैल्यू के लिए मेरा प्रीफिक्स 1 * 1 होगा इस वैल्यू के लिए मेरा प्रीफिक्स 1 * 2 होगा इस वैल्यू के लिए मेरा प्रीफिक्स 2
* 3 होगा तो हर वैल्यू के जो प्रीफिक्स होते हैं वो इंक्रीमेंटल होते हैं मतलब वो पहली वैल्यू से कैलकुलेट किए जा सकते हैं
तो क्यों ना हम एक सिंगल लूप लगाएं जिसमें प्रीफिक्सेस हर एक आईएट इंडेक्स का निकाल तो लें पर उसे स्टोर
नहीं कराएंगे उसे सिंपली क्या करेंगे उसे सिंपली आंसर ऑफ i के अंदर मल्टीप्लाई कर देंगे क्योंकि
इवेंचर है अगर ये फर्स्ट लूप प्रीफिक्स ऑफ़ i को कैलकुलेट कर रहा है तो एट दी एंड ये जो प्रीफिक्स ऑफ़ आई स्टोर कर रहा है
इसको मल्टीप्लाई तो करना है बाद में आंसर में जाके तो मैं कह रही हूं मल्टीप्लिकेशन बाद में क्यों यहां पे स्टोर करने की जगह
अभी कर दो मल्टीप्लाई तो हमें बाद के लिए स्टोर करना ही नहीं पड़ेगा माय पॉइंट इज कि अभी हम स्टोर कर रहे हैं बाद में हम
मल्टीप्लाई कर रहे हैं तो ये जो स्टोरेज हो रही है ये मल्टीप्लिकेशन के लिए तो हो रही है तो हम क्या करें पहले ही
मल्टीप्लाई कर दें तो हमें ये स्टोर करना ही नहीं पड़ेगा तो हमारी एक्स्ट्रा स्पेस कॉम्प्लेक्शन वेक्टर चाहिए ही नहीं होगा
तो व्हाट वी विल डू इज अपने फर्स्ट लूप के अंदर यह जो प्रीफिक्स कैलकुलेशन है इसके अंदर जैसे ही प्रीफिक्स ऑफ i कैलकुलेट हो
गया मुझे सिंपली क्या करना है मुझे सिंपली उसे मल्टीप्लाई कर देना है अपने आंसर के साथ तो मैं क्या कर सकती हूं इंस्टेड ऑफ
टेकिंग दिस प्रीफिक्स वेक्टर व्हाट आई कैन डू इज मैं एक लॉन्ग लॉन्ग इंट इसे कह देती हूं या इनफैक्ट वी कैन आल्सो कॉल इट इंटी
जर एक इंटी जर ले लेते हैं कॉल्ड प्रीफिक्स प्रीफिक्स को इनिश इज कर देते हैं वन के साथ तो प्रीफिक्स क्या हो गया
प्रीफिक्स यहां पे कैलकुलेट हो गया एक सिंगल वेरिएबल है नाउ वी डोंट रियली नीड अ वेक्टर और अब हर एक आईए प्रीफिक्स हम कैसे
कैलकुलेट करेंगे आईए प्रीफिक्स हो जाएगा प्रीफिक्स इज इक्वल टू पुराना प्रीफिक्स कहां पे स्टोर्ड है मुझे पता है अब मैं
अपने प्रीफिक्सेस को सीधा आंसर के अंदर स्टोर करने वाली हूं यानी अब हम क्या कर रहे हैं सिर्फ आंसर वाला वेरी बनाएंगे इस
आंसर एरे के अंदर सबसे पहले नंबर्स ऑफ आई पे एक फॉरवर्ड लूप चलाएंगे और इस आंसर एरे के अंदर सिर्फ प्रीफिक्सेस को स्टोर
करेंगे फर्स्ट लूप के अंदर तो सबसे पहले आंसर ऑफ वन का प्रीफिक्स तो वन हो ही जाएगा इसको हम चाहे तो पहले भी इनिश इज
हमने ऑलरेडी कर दिया है आंसर की सारी वैल्यूज को वन के साथ जीरो इथ इंडेक्स वाले का जो प्रीफिक्स है दैट इज़ ऑलरेडी
वन क्योंकि उससे पहले कोई वैल्यूज नहीं है इससे चीजें मल्टीप्लाई होनी है तो इसको हमने वन से इनिश इज कर दिया अब यहां पर
अगर मुझे प्रीफिक्स ऑफ i स्टोर करना है तो वो क्या हो जाएगा पुरानी वैल्यू मल्टीप्ला बाय नंबर की पुरानी वैल्यू तो यहां पर आ
जाएगी वैल्यू वन के इक्वल अब इसका प्रीफिक्स अगर मुझे स्टोर करना है तो क्या करना पड़ेगा पुराना प्रीफिक्स मल्टीप्ला
बाय पुरानी वैल्यू यानी टू के इक्वल अब नेक्स्ट का प्रीफिक्स अगर मुझे कैलकुलेट करना है तो क्या करना पड़ेगा
पुराना प्रीफिक्स मल्टीप्ला बाय पुरानी नंबर की वैल्यू व्हिच इज गोइंग टू बी इक्वल टू 6 तो इस तरीके से ये जो
प्रीफिक्सेस मुझे स्टोर कराने थे काम वही है लॉजिक वही है प्रीफिक्स स्टोर कराने का पर इस बार प्रीफिक्स को डायरेक्टली हम
स्टोर करा रहे अपने आंसर ऑफ i में इंस्टेड ऑफ क्रिएटिंग अ सेपरेट वेक्टर तो इस बार कोड के अंदर हमें क्या करने की जरूरत है
ये जो हम प्रीफिक्स कैलकुलेशन कर रहे हैं इसको हम डायरेक्टली आंसर के अंदर करेंगे यानी हर बार मेरा आंसर ऑफ i हो जाएगा आंसर
ऑफ i - 1 मल्टीप्ला बा बाय नम्स ऑफ i - 1 क्योंकि इस बार प्रीफिक्स एरे का काम मेरा आंसर ऑफ़ i ही कर रहा है इनफैक्ट हम चाहे
तो ये प्रीफिक्स वेरिएबल भी हटा सकते हैं वी डोंट रेयली नीड द प्रीफिक्स वेरिएबल क्योंकि उनको हम डायरेक्टली आंसर के अंदर
स्टोर करा लेंगे और ये प्रीफिक्स वेक्टर भी मैंने पूरा हटा दिया अब सेकंड जो चीज हमें कैलकुलेट करनी है दैट इज द सफिक्स
जैसे हमने प्रीफिक्स कैलकुलेशन का काम सीधा आंसर के अंदर किया ऐसे ही सफिक्स कैलकुलेशन का काम भी सीधा आंसर के अंदर
करेंगे क्योंकि हम क्या लॉजिक यूज़ कर रहे थे हम पहले सफिक्स को अलग से कैलकुलेट कर रहे थे फिर उसे मल्टीप्लाई कर रहे थे पर
अब हम कह रहे हैं कि अलग से कैलकुलेट करके मल्टीप्लाई मत करो सीधा मल्टीप्लाई कर दो कैलकुलेट करके तो कैलकुलेट करके
मल्टीप्लाई करने का मतलब है कि इस बार सफिक्स कैलकुलेशन के लिए मुझे क्या करना है हमें एक बैकवर्ड्स लूप चलाना है इस एरे
पर अपने नॉर्मल एरे पर एक बैकवर्ड्स लूप चलाएंगे और इसी डायरेक्शन में अपने सफिक्स को डायरेक्टली आंसर के अंदर मल्टीप्लाई
करते हुए चले जाएंगे तो प्रीफिक्स तो ऑलरेडी आंसर के अंदर आ चुका है अब सफिक्स एक-एक करके एक-एक करके कैलकुलेट होके आंसर
के अंदर आकर स्टोर हो जाएगा तो अब हम चाहें तो यहां पर अपना एक सफिक्स वेरिएबल ले सकते हैं सफिक्स वेरिएबल की शुरुआत कर
लेंगे वन के साथ शुरुआत में सफिक्स वेरिएबल वन हो जाएगा हमें पता है इससे मुझे वन को मल्टीप्लाई करना है फिर मेरा
सफिक्स वेरिएबल मल्टीप्लाई हो जाएगा फोर के साथ नेक्स्ट लेवल पे मुझे पता है मुझे फोरर से मल्टीप्लाई करना है फिर मेरा
सफिक्स वेरिएबल हो जाएगा मल्टीप्लाई थ्री के साथ नेक्स्ट लेवल पे मुझे पता है मुझे 12 से मल्टीप्लाई करना है तो आई होप हमें
ये लॉजिक समझ में आ रहा होगा कि सफिक्स के साथ मुझे क्या करना है इसे एक बार रिमूव करते हैं सफिक्स वेरिएबल के लिए सिंपली हम
एक बैकवर्ड्स लूप चलाएंगे जैसा हम पहले पहले चला रहे थे i की वैल्यू शुरू करेंगे n -2 से i ग्र = 0 i को कर देंगे माइनस
माइनस हमने एक सफिक्स वेरिएबल ले लिया है जिसको हम इनिश इइ कर सकते हैं वन के साथ हर बार सफिक्स की वैल्यू क्या होती है अगर
मुझे इस नंबर का सफिक्स निकालना है तो दैट इज गोइंग टू बी इक्वल टू सफिक्स की जो ऑलरेडी वैल्यू है मल्टीप्ला बाय जो भी
मेरा पिछले वाला नंबर था तो हर बार सफिक्स हो जाएगा मल्टीप्लाई इक्वल टू नम्स ऑफ i + 1 ये मेरे सफिक्स की वैल्यू होती है तो जो
भी आयत स फिस इस वेरिएबल के अंदर स्टोर्ड है उसे अपने आंसर ऑफ i के साथ हम मल्टीप्लाई कर देंगे तो यह मेरे फाइनल
आंसर की वैल्यू कैलकुलेट हो जाएगी तो इस बार हम दो स्टेप्स के अंदर कर सकते हैं डायरेक्टली सफिक्स स्टोर कराने के लिए इस
बार आंसर एरे को यूज़ नहीं कर रहे क्योंकि आंसर एरे में ऑलरेडी प्रीफिक्स टड है तो हम दो वैल्यूज को मिक्स नहीं करना चाहते
तो इसीलिए मैंने अलग से एक वेरिएबल सफिक्स नाम का ले लिया है तो सेकंड लूप के अंदर एक तरीके से हम ये काम परफॉर्म करने वाले
हैं एक बार इसको कोड करते हैं फिर इसको ड्राई रन करेंगे अब मुझे बेसिकली इस थर्ड लूप की जरूरत ही नहीं पड़ी कभी ना मुझे इस
सफिक्स की जरूरत पड़ेगी मुझे क्या करना है सिंपली यहां पर आई कैन क्रिएट एन इंटी जर कॉल्ड सफिक्स इनिश इइ ज्ड विद वैल्यू वन
और हम हर बार क्या करेंगे अपने सफिक्स ऑफ आ की वैल्यू कैलकुलेट करेंगे व्हिच इज गोइंग टू बी मल्टीप्लाई इक्वल टू नम्स ऑफ
i + 1 और हर बार आंसर ऑफ i के अंदर मल्टीप्लाई कर देंगे वही चीज अपना सफिक्स और इस बार मेरा सफिक्स वेरिएबल
क्या कर रहा है यह मेरे आयत सफिक्स को कैलकुलेट कर रहा है वही काम जो हम पहले कर रहे थे पर इस बार इसे अलग से एक वेक्टर
में अलग-अलग स्टोर कराने की जरूरत नहीं है स्टोर इसलिए करा रहे थे ताकि ये मल्टीप्लिकेशन हो सके इस मल्टीप्लिकेशन को
हमने यहीं पर कर दिया है ये मल्टीप्लिकेशन हो सके इस मल्टीप्लिकेशन को भी यहीं पर कर दिया है तो इस बार मुझे लगे वही सेम दो
लूप्स तीन की जगह दो लूप लगे इस बार तो टाइम कॉम्प्लेक्शन में हमने दोनों वेक्टर्स को
हटा दिया है तो दैट इज व्हाई द स्पेस कॉम्प्लेक्टेड बी ऑप्टिमाइज्ड टू कांस्टेंट तो इस पूरे प्रोसेस को एक बार
रन कर लेते हैं रन किया तो हमारे टेस्ट केसेस एक्सेप्ट हो रहे हैं अब यहां पर एक बार लॉजिक भी देख लेते हैं कि एगजैक्टली
हम क्या करने वाले हैं फॉरवर्ड जाके हम सफिक्स को कैलकुलेट कर लेंगे यह वाला लॉजिक तो हम सबने समझ ही लिया है इट इज़
गोइंग टू बी वेरी इजी अब बैकवर्ड जाके एगजैक्टली हम क्या कर रहे हैं वो देख लेते हैं बैकवर्ड जाके हम एक सफिक्स एरे ले रहे
हैं जिसको इनिश इज किया वन के साथ तो हमारे फर्स्ट इस वाले इंडेक्स के लिए सफिक्स ऑलरेडी वन के इक्वल है और इसको वन
को यहां से मल्टीप्लाई करें नहीं करें उससे कोई फर्क नहीं पड़ता तो हम वन से मल्टीप्लिकेशन नहीं कर रहे यहां पर अब हम
नेक्स्ट इंडेक्स पर मतलब इस इंडेक्स पर जा रहे हैं और इसके लिए सफिक्स कैलकुलेट कर रहे हैं इस इंडेक्स का सफिक्स हो जाएगा 1
मल्टीप्ला बाय इसका अगला इंडेक्स यानी फर तो सफिक्स हो जाएगा फोर के इक्वल और इस फोर को हम इस इंडेक्स से मल्टीप्लाई कर
देंगे तो टू को फोर से मल्टीप्लाई करेंगे तो ये वैल्यू हो जाएगी 8 के इक्वल फिर नेक्स्ट इंडेक्स पर जाएंगे इस इंडेक्स का
सफिक्स निकालेंगे इस इंडेक्स का सफिक्स हो जाएगा 4 ल् 3 यही चीज हम यहां पर कर रहे हैं पुराना सफिक्स मल्टीप्ला बाय नम्स ऑफ
i तो 4 * 3 दिस दिस इज गोइंग टू बी इक्वल टू 12 तो यहां पर इस वैल्यू को हम 12 से मल्टीप्लाई कर देंगे यहां 12 से
मल्टीप्लाई किया तो 12 वैल्यू आ गई फिर हम नेक्स्ट इंडेक्स पे गए इस इंडेक्स का सफिक्स हो जाएगा 12 ल्ड बा 2 तो 12 * 2 हो
जाने वाले है 24 के इक्वल एंड फिर इस वैल्यू को 24 से मल्टीप्लाई कर देंगे 124 से मल्टीप्लाई होगा तो वैल्यू आ जाएगी 24
के इक्वल फाइनल वैल्यूज क्या हुई आंसर के अंदर फाइनल वैल्यूज हुई 24 12 88 एंड 6स और यही था हमारा आंसर तो ये हमारा पूरा
लॉजिक फॉलो हुआ है जिसमें हमें टाइम कॉम्प्लेक्शन लगी है बिग ऑफ़ वन और इस पूरे प्रोसेस के अंदर कहीं भी हमने डिवाइड
ऑपरेटर को यूज़ नहीं किया है सो दैट इज व्हाई दिस इज एन ऑप्टिमाइज्ड कोड इसको हम सबमिट भी कर सकते हैं तो हमारी सारी टेस्ट
केसेस क्लियर हो रहे हैं तो आई होप कि आज का डीएसए क्वेश्चन हमें अच्छे से समझ में आया होगा नेक्स्ट क्लास के अंदर हम शुरुआत
करेंगे पॉइंट्स के साथ जिसमें इंपॉर्टेंट कॉन्सेप्ट्स ऑफ पॉइंट्स जो इंटरव्यू पॉइंट ऑफ़ व्यू से इंपॉर्टेंट होते हैं हम
उन्हें कवर करने वाले हैं आज के लिए इतना ही मिलते हैं नेक्स्ट वीडियो में टिल देन कीप लर्निंग एंड कीप एक्सप्लोरिंग
इस समस्या में हमें एक integer array nums दिया जाता है, और हमें एक answer array लौटाना होता है जिसमें प्रत्येक इंडेक्स i पर nums[i] को छोड़कर बाकी सभी एलिमेंट्स का गुणनफल (product) होता है। एक महत्वपूर्ण शर्त यह है कि हम डिवीज़न ऑपरेटर (/) का उपयोग नहीं कर सकते। उदाहरण के लिए, nums = [1, 2, 3, 4] के लिए आउटपुट [24, 12, 8, 6] होगा।
ब्रूट फोर्स अप्रोच में हम दो नेस्टेड लूप का उपयोग करते हैं, जहाँ बाहरी लूप हर इंडेक्स पर जाता है और आंतरिक लूप पूरे array को traverse करके सभी एलिमेंट्स का गुणनफल निकालता है, सिवाय उस इंडेक्स के जो वर्तमान में है। इसकी समय जटिलता O(n²) होती है, जो बड़े inputs (जैसे n = 10⁵) के लिए Time Limit Exceeded (TLE) देगी, इसलिए यह अव्यावहारिक है।
इस अप्रोच में हम दो extra arrays का उपयोग करते हैं: prefix और suffix। prefix[i] में nums[0] से nums[i-1] तक के सभी एलिमेंट्स का गुणनफल होता है, और suffix[i] में nums[i+1] से nums[n-1] तक के सभी एलिमेंट्स का गुणनफल होता है। फिर answer[i] को prefix[i] * suffix[i] के रूप में calculate किया जाता है। यह अप्रोच O(n) समय में काम करती है लेकिन O(n) extra space का उपयोग करती है।
सबसे इष्टतम अप्रोच में हम output array (answer) का उपयोग prefix products को store करने के लिए करते हैं, और फिर एक single variable suffix का उपयोग करके suffix products को calculate करते हैं और उन्हें सीधे answer में multiply करते हैं। इसमें O(n) समय लगता है और O(1) extra space (output array को छोड़कर)। यह इंटरव्यू के लिए सबसे इष्टतम समाधान है क्योंकि यह न केवल space को optimize करता है बल्कि prefix/suffix computation के एक common pattern को भी दर्शाता है जो कई अन्य DSA समस्याओं में उपयोगी है।
कॉन्सटेंट स्पेस अप्रोच में, 'suffix' variable को array के अंत से शुरू करके (right to left) iterate करते हुए अपडेट किया जाता है। पहले इसे 1 से initialize किया जाता है। फिर प्रत्येक iteration में, suffix को nums[i+1] से multiply करके अपडेट किया जाता है, और फिर answer[i] को suffix से multiply किया जाता है। यह प्रक्रिया सुनिश्चित करती है कि answer[i] में वर्तमान इंडेक्स के बाद के सभी एलिमेंट्स का गुणनफल शामिल हो जाए।
Keep this summary
Save it to LunaNotes and it becomes a real note in your library — editable, searchable, and ready to turn into flashcards or a diagram. Free to start.
Save to LunaNotesOr summarise for another video.
32K+ people have turned 65K+ videos into notes
“Very useful tool. I'm using it for the last couple weeks and I'm loving it so far. Makes learning on YouTube a great experience.”
This summary and transcript were automatically generated using AI with the Free YouTube transcript summary tool by LunaNotes.
Related summaries
जावा में रिकर्शन: बेसिक्स, स्टैक और प्रॉब्लम्स की पूरी गाइड
इस वीडियो में जावा में रिकर्शन (Recursion) को शुरुआत से समझाया गया है। वीडियो में बताया गया है कि रिकर्शन क्या है, यह मेमोरी में स्टैक के रूप में कैसे काम करता है, स्टैक ओवरफ्लो की समस्या क्या है, और बेसिक से लेकर एडवांस लेवल की प्रॉब्लम्स जैसे फैक्टोरियल, फिबोनाची सीरीज और पावर कैलकुलेशन को कैसे हल करें।
रे ऑप्टिक्स: दर्पण एवं अपवर्तन का संपूर्ण निर्देशन एवं डेरिवेशन ट्रिक्स
यह लाइव कक्षा रे ऑप्टिक्स चैप्टर का एकदम बेसिक से लेकर एडवांस तक कवरेज करती है। आप मिरर फॉर्मूला, साइन कन्वेंशन, लेंस मेकर फॉर्मूला और स्नेल्स लॉ जैसे सभी डेरिवेशन को याद करने के आसान ट्रिक्स व हैक्स सीखेंगे, साथ ही पिछले वर्षों के प्रश्नों और न्यूमेरिकल्स का अभ्यास भी करेंगे।
Python OOP Concepts: Inheritance, Polymorphism & Advanced Classes Explained
इस वीडियो में पाइथन की ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP) के महत्वपूर्ण कॉन्सेप्ट्स जैसे कि इनहेरिटेंस, प्राइवेट एट्रिब्यूट्स, क्लास और स्टैटिक मेथड्स, और पॉलीमॉर्फिज्म को विस्तार से समझाया गया है। साथ ही, वीडियो में ओपनिंग से लेकर क्लास डिफाइनिंग, ऑपरेटर ओवरलोडिंग, प्रॉपर्टी डेकोरेटर्स, और रियल टाइम उदाहरणों द्वारा OOP की समझ बढ़ाई गई है।
रीजनिंग: ब्लड रिलेशन, डायरेक्शन और मैथमेटिकल ऑपरेशन पूरी गाइड
यह वीडियो रीजनिंग के तीन महत्वपूर्ण टॉपिक्स को कवर करता है: डायरेक्शन एंड डिस्टेंस, ब्लड रिलेशन, और मैथमेटिकल ऑपरेशंस। इसमें बेसिक कॉन्सेप्ट्स से लेकर ट्रिकी सवालों को हल करने की स्मार्ट तकनीकों तक, सब कुछ सरल भाषा में समझाया गया है ताकि आप आसानी से याद रख सकें और परीक्षा में बेहतरीन प्रदर्शन कर सकें।
उत्पादन योजना और सुविधा निर्णय | PPC, क्षमता और लेआउट रणनीतियाँ
यह वीडियो 'प्रोडक्शन प्लानिंग एंड फैसिलिटी डिसीजन' पर 9वां लेक्चर है, जो Cocoar परीक्षा की तकनीकी श्रृंखला का हिस्सा है। इसमें PPC (रूटिंग, लोडिंग, शेड्यूलिंग, डिस्पैचिंग, एक्सपिडिटिंग), एग्रीगेट प्लानिंग (लेवल, चेज़, मिक्स्ड रणनीतियाँ), क्षमता मापन (डिज़ाइन, प्रभावी, वास्तविक), बॉटलनेक विश्लेषण, और सुविधा स्थान चयन (फैक्टर रेटिंग, ग्रैविटी केंद्र, ब्रेक-ईवन) को कवर किया गया है। वीडियो में विस्तृत उदाहरण और MCQ अभ्यास भी शामिल हैं।
Most viewed summaries
A Comprehensive Guide to Using Stable Diffusion Forge UI
Explore the Stable Diffusion Forge UI, customizable settings, models, and more to enhance your image generation experience.
Kolonyalismo at Imperyalismo: Ang Kasaysayan ng Pagsakop sa Pilipinas
Tuklasin ang kasaysayan ng kolonyalismo at imperyalismo sa Pilipinas sa pamamagitan ni Ferdinand Magellan.
Mastering Inpainting with Stable Diffusion: Fix Mistakes and Enhance Your Images
Learn to fix mistakes and enhance images with Stable Diffusion's inpainting features effectively.
Pamamaraan at Patakarang Kolonyal ng mga Espanyol sa Pilipinas
Tuklasin ang mga pamamaraan at patakaran ng mga Espanyol sa Pilipinas, at ang epekto nito sa mga Pilipino.
How to Install and Configure Forge: A New Stable Diffusion Web UI
Learn to install and configure the new Forge web UI for Stable Diffusion, with tips on models and settings.
Found this summary useful?
Take it with you. One click puts it in your own LunaNotes library.
Save to LunaNotes