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