কম্পিউটার টিউটোরিয়াল

4Sum সমস্যা C++-এ

সমস্যা বিবরণ

একটি পূর্ণসংখ্যার অ্যারে দেওয়া আছে। চারটি এলিমেন্ট a, b, c, d খুঁজে বের করতে হবে যাতে a + b + c + d = target। অ্যারেতে সব unik কোয়াড্রুপলেট বের করতে হবে।

উদাহরণ: অ্যারে = [-1,0,1,2,0,-2], target = 0 হলে ফলাফল [[-1,0,0,1],[-2,-1,1,2],[-2,0,0,2]]।

সমাধানের পদ্ধতি

সাধারণত kSum() ফাংশন ব্যবহার করে সমাধান করা হয়। প্রাথমিক কল করা হয় k=4 দিয়ে। ফাংশনটি নিম্নরূপ:

  • একটি রেজাল্ট অ্যারে ডিফাইন করুন।
  • যদি k = 2 হয়, তবে টু-পয়েন্টার টেকনিক ব্যবহার করে জোড়া বের করুন।
  • অন্যথায়, start থেকে arr.size() - k পর্যন্ত লুপ চালিয়ে প্রতিটি এলিমেন্ট নিয়ে রিকার্সিভলি k-1 সম সমাধান করুন।
  • ডুপ্লিকেট এড়াতে সো্র্ট করা অ্যারেতে সমান এলিমেন্ট স্কিপ করুন।

C++ কোড উদাহরণ

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

void print_vector(vector<vector<int> > v) { 
    cout << "["; 
    for (int i = 0; i < v.size(); i++) { 
        cout << "["; 
        for (int j = 0; j < v[i].size(); j++) { 
            cout << v[i][j] << ", "; 
        } 
        cout << "],"; 
    } 
    cout << "]" << endl; 
} 

class Solution { 
public: 
    void addAll(vector<vector<int> >& res, vector<vector<int> >& temp) { 
        for (int i = 0; i < temp.size(); i++) res.push_back(temp[i]); 
    } 
    vector<vector<int>> fourSum(vector<int>& nums, int target) { 
        sort(nums.begin(), nums.end()); 
        return kSum(nums, 0, 4, target); 
    } 
    vector<vector<int>> kSum(vector<int>& arr, int start, int k, int target) { 
        vector<vector<int>> res; 
        if (k == 2) { 
            int left = start; 
            int right = arr.size() - 1; 
            vector<int> temp(2); 
            while (left < right) { 
                if (arr[left] + arr[right] == target) { 
                    temp[0] = arr[left]; 
                    temp[1] = arr[right]; 
                    res.push_back(temp); 
                    while (left < right && arr[left] == arr[left + 1]) left++; 
                    while (left < right && arr[right] == arr[right - 1]) right--; 
                    left++; 
                    right--; 
                } else if (arr[left] + arr[right] > target) right--; 
                else left++; 
            } 
        } else { 
            for (int i = start; i < (int)arr.size() - k + 1; i++) { 
                if (i > start && arr[i] == arr[i - 1]) continue; 
                vector<vector<int>> temp = kSum(arr, i + 1, k - 1, target - arr[i]); 
                for (int j = 0; j < temp.size(); j++) { 
                    temp[j].push_back(arr[i]); 
                } 
                addAll(res, temp); 
            } 
        } 
        return res; 
    } 
}; 

int main() { 
    Solution ob; 
    vector<int> v = {1,0,-1,0,-2,2}; 
    print_vector(ob.fourSum(v, 0)); 
}

ইনপুট

[1,0,-1,0,-2,2] 0

আউটপুট

[[1,2,-1,-2],[0,2,0,-2],[0,1,0,-1]]
  1. C++-এ ডায়াগোনাল ট্রায়ভার্স II

  2. প্রসেস কিল করা (Kill Process) C++-এ

  3. স্কোয়ারেল সিমুলেশন (Squirrel Simulation) C++-এ

  4. C++-এ আয়তাকার এলাকা II (Rectangle Area II) সমাধান