কম্পিউটার

4 যোগফল C++ এ


ধরুন আমাদের কাছে সংখ্যার একটি অ্যারে আছে। এটি এন পূর্ণসংখ্যা সঞ্চয় করে, অ্যারেতে চারটি উপাদান রয়েছে a, b, c এবং d। আমাদের আরেকটি লক্ষ্য মান আছে, যেমন a + b + c + d =লক্ষ্য। অ্যারেতে সমস্ত অনন্য চতুষ্পদ খুঁজুন যা পরিস্থিতিকে সন্তুষ্ট করে। সুতরাং অ্যারে যদি হয় [-1,0,1,2,0,-2] এবং লক্ষ্য 0 হয়, তাহলে ফলাফল হবে [[-1, 0, 0, 1],[-2, -1, 1, 2], [-2, 0, 0, 2]]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • প্রকৃত যোগফল kSum() নামক একটি ফাংশন ব্যবহার করে করা হচ্ছে। এটি অ্যারে, স্টার্ট, কে এবং টার্গেট নেয়। প্রাথমিকভাবে ফাংশনটিকে k মান 4 দিয়ে কল করা হবে। ফাংশনটি নিম্নরূপ হবে
  • একটি অ্যারে রেস সংজ্ঞায়িত করুন
  • যদি k =2, তাহলে
    • বামে :=শুরু এবং ডানে :=অ্যারের আকার – 1
    • আকার 2 এর আরেকটি অ্যারে তাপমাত্রা সংজ্ঞায়িত করুন
    • যখন বাম
    • যদি arr[left] + arr[right] =টার্গেট, তাহলে
      • temp[0] :=arr[left], temp[1] :=arr[right], এবং res-এ temp সন্নিবেশ করুন
      • যখন বাম <ডান এবং arr[left] =arr[left + 1]
        • l 1 দ্বারা বাড়ান
      • যখন বাম
      • r 1 দ্বারা হ্রাস করুন
    • l 1 দ্বারা বাড়ান এবং r 1 দ্বারা হ্রাস করুন
  • অন্যথায় যদি arr[left] + arr[right]> টার্গেট, তাহলে ডানদিকে 1 কমিয়ে দিন
  • অন্যথায় 1 দ্বারা বাম বাড়ান
  • অন্যথায়
    • আমি রেঞ্জের জন্য আরার সাইজ শুরু করি – k,
      • যদি i> start এবং arr[i] =arr[i - 1], তাহলে পরবর্তী ধাপগুলি এড়িয়ে যান এবং চালিয়ে যান
      • একটি 2d ​​অ্যারে টেম্প সংজ্ঞায়িত করুন :=kSum(arr, i + 1, k – 1, লক্ষ্য – arr[i])
      • j-এর জন্য 0 থেকে টেম্পের মধ্যে
        • অস্থায়ী [j] পরে arr[i] ঢোকান
      • রেজে টেম্পের সমস্ত উপাদান কপি করুন
  • রিটার্ন রিটার্ন
  • উদাহরণ(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;
       }
    };
    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. C++ এ কিল প্রসেস

    3. C++ এ কাঠবিড়ালি সিমুলেশন

    4. C++ এ আয়তক্ষেত্র ক্ষেত্র II