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

C++ में रेंज सम क्वेरी - अपरिवर्तनीय


मान लीजिए हमारे पास पूर्णांकों का एक ऐरे है। हमें इंडेक्स i से j तक मौजूद तत्वों का योग ढूंढना है। दो बातें ध्यान में रखनी हैं कि ऐरे अपरिवर्तनीय होगा, इसलिए तत्व बदले नहीं जाएंगे, और ऐसी कई क्वेरी होंगी। इसलिए हमें बड़ी संख्या में क्वेरी के लिए निष्पादन समय का ध्यान रखना होगा। मान लीजिए ऐरे A = [5, 8, 3, 6, 1, 2, 5] है, तो यदि क्वेरी (A, 0, 3) है, तो यह 5 + 8 + 3 + 6 = 22 होगा।

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

  • एक ऐरे B लें। B[i] 0 से i तक के तत्वों का योग स्टोर करेगा
  • क्वेरी के लिए B[j] - B[i - 1] करें

आइए बेहतर समझ के लिए निम्न कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class NumArray { 
public: 
    vector pre; 
    
    NumArray(vector& nums) { 
        pre.clear(); 
        int n = nums.size(); 
        pre.resize(n); 
        for(int i = 0; i < n; i++){ 
            if(i == 0) pre[0] = nums[0]; 
            else 
                pre[i] = pre[i - 1] + nums[i]; 
        } 
    } 
    
    int sumRange(int i, int j) { 
        if(i == 0) return pre[j]; 
        return pre[j] - pre[i - 1]; 
    } 
}; 

main(){ 
    vector v = {5,8,3,6,1,2,5}; 
    NumArray na(v); 
    cout << na.sumRange(0,2) << endl; 
    cout << na.sumRange(2,5) << endl; 
    cout << na.sumRange(0,5) << endl; 
}

इनपुट

इसे [5,8,3,6,1,2,5] से इनिशियलाइज़ करें 
sumRange(0,2) कॉल करें 
sumRange(2,5) 
sumRange(0,5)

आउटपुट

16 12 25

  1. - C++ में संयोजन योग II (Combination Sum II)

    मान लीजिए हमारे पास उम्मीदवार संख्याओं का एक समूह है (सभी तत्व अद्वितीय हैं) और एक लक्ष्य संख्या। हमें उम्मीदवारों में उन सभी अद्वितीय संयोजनों को ढूंढना है जहां उम्मीदवार संख्याओं का योग दिए गए लक्ष्य के बराबर हो। वही संख्या उम्मीदवारों से एक से अधिक बार नहीं चुनी जाएगी। यदि तत्व [2,3,6,7,8] हैं औ

  1. - C++ में रेंज सम क्वेरीज विदाउट अपडेट्स

    समस्या विवरण यहां हम देखेंगे कि सरणी में इंडेक्स i से इंडेक्स j तक के तत्वों का योग कैसे प्राप्त करें। यह मूल रूप से रेंज क्वेरी है। कार्य केवल इंडेक्स i से j तक एक लूप चलाकर और योग की गणना करके आसान है। लेकिन हमें इस बात का ध्यान रखना होगा कि इस तरह की रेंज क्वेरी कई बार निष्पादित की जाएगी। इसलिए

  1. - C++ में सम ऐरे पजल (बिना घटाव ऑपरेटर के)

    यहां हम ऐरे से संबंधित एक रोचक समस्या देखेंगे। n तत्वों वाला एक ऐरे है। हमें n तत्वों का एक और ऐरे बनाना है। लेकिन दूसरे ऐरे का i-th स्थान पहले ऐरे के i-th तत्व को छोड़कर सभी तत्वों का योग रखेगा। और एक प्रतिबंध है कि हम इस समस्या में घटाव ऑपरेटर का उपयोग नहीं कर सकते। यदि हम घटाव ऑपरेशन का उपयोग कर