কম্পিউটার

C++-এ সর্বাধিক সাইজ সাবারের সমষ্টি k সমান


ধরুন আমাদের কাছে nums নামে একটি অ্যারে আছে এবং একটি টার্গেট মান k, আমাদেরকে একটি সাবয়ারের সর্বোচ্চ দৈর্ঘ্য খুঁজে বের করতে হবে যার যোগফল k হবে। যদি কোন উপস্থিত না থাকে, তার পরিবর্তে 0 ফেরত দিন।

সুতরাং, ইনপুট যদি nums =[1, -1, 5, -2, 3], k =3 এর মত হয়, তাহলে আউটপুট হবে 4, যেমন সাবয়ারে [1, - 1, 5, -2] যোগফল 3 এবং দীর্ঘতম।

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

  • ret :=0

  • একটি মানচিত্র m

    সংজ্ঞায়িত করুন
  • n :=সংখ্যার আকার

  • তাপমাত্রা :=0, m[0] :=-1

  • আরম্ভ করার জন্য i :=0, যখন i

    • temp :=temp + nums[i]

    • যদি (temp - k) m হয়, তাহলে −

      • ret :=সর্বোচ্চ ret এবং i - m[temp - k]

    • যদি temp m এ না হয়, তাহলে −

      • m[temp] :=i

  • রিটার্ন রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int maxSubArrayLen(vector<int<& nums, int k) {
      int ret = 0;
      unordered_map <int, int> m;
      int n = nums.size();
      int temp = 0;
      m[0] = -1;
      for(int i = 0; i < n; i++){
         temp += nums[i];
         if(m.count(temp - k)){
            ret = max(ret, i - m[temp - k]);
         }
         if(!m.count(temp)){
            m[temp] = i;
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int< v = {1,-1,5,-2,3};
   cout << (ob.maxSubArrayLen(v, 3));
}

ইনপুট

[1,-1,5,-2,3], 3

আউটপুট

4

  1. C++ এ প্রদত্ত যোগফল সহ সর্বাধিক আকারের উপসেট

  2. C++ এ কমপক্ষে X এবং সর্বাধিক Y আকারের একটি সাবয়ারের সর্বোচ্চ গড়

  3. C++-এ সর্বোচ্চ যোগফল কঠোরভাবে বর্ধিত সাবাররে খুঁজুন

  4. C++ এ ডিভাইড অ্যান্ড কনক্যুয়ার ব্যবহার করে সর্বাধিক যোগফল সাব-অ্যারে