ধরুন আমাদের কাছে 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