nums라는 배열과 대상 값 k가 있다고 가정하고 k가 되는 하위 배열의 최대 길이를 찾아야 합니다. 존재하지 않으면 대신 0을 반환합니다.
따라서 입력이 nums =[1, -1, 5, -2, 3], k =3과 같으면 하위 배열 [1, - 1, 5, -2]의 합이 다음과 같이 출력은 4가 됩니다. 3이고 가장 깁니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
ret :=0
-
하나의 맵 정의
-
n :=숫자 크기
-
온도 :=0, m[0] :=-1
-
initialize i :=0의 경우, i
-
임시 :=임시 + 숫자[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