Notice
250x250
Recent Posts
Recent Comments
Link
넘치게 채우기
[Leetcode] 525. Contiguous Array 본문
728x90
반응형
https://leetcode.com/problems/contiguous-array/description/
Leetcode - Contiguous Array
문제 유형 : 부분합, 해시
문제 난이도 : Medium
문제
Given a binary array nums, return the maximum length of a contiguous subarray with an equal number of 0 and 1.
바이너리 배열 nums가 주어진다. 0과 1의 개수가 같은 부분배열의 최대 길이를 구하시오.
풀이
부분합을 이용하여 풀 수 있다.
해시맵을 만들어서 총합-인덱스의 형태로 저장한다.

배열을 순회하면서, 총합에 0이면 -1을, 1이면 1을 추가한다.
만약 총합이 0이라면, 처음부터 i인덱스까지 조건을 만족하는 부분배열이라는 뜻으로, 최대 길이에 i+1을 대입한다.
만약 다른 총합이 나왔는데, 해시 맵에 없다면, 이 인덱스를 저장시킨다. 그 총합을 가지는 가장 왼쪽이라는 뜻이다.
만약 맵에 같은 총합이 존재한다면, 그 인덱스부터 현재인 i까지 조건을 만족한다는 뜻으로, 최대 길이와 비교하여 갱신시키면 된다.
최대 길이를 반환한다.
코드
C++
class Solution {
public:
int findMaxLength(vector<int>& nums) {
const int n = nums.size();
unordered_map<int, int> mp;
int sum = 0;
int maxLen = 0;
for(int i = 0; i < n; i++) {
if(nums[i] == 0) {
sum--;
} else {
sum++;
}
if(sum == 0) {
maxLen = i+1;
continue;
}
if(!mp[sum]) {
mp[sum] = i+1;
} else {
maxLen = max(maxLen, i - mp[sum]+1);
}
}
return maxLen;
}
};
728x90
반응형
'PS > LeetCode' 카테고리의 다른 글
[LeetCode] 452. Minimum Number of Arrows to Burst Balloons (0) | 2024.03.18 |
---|---|
[LeetCode] 57. Insert Interval (0) | 2024.03.17 |
[LeetCode] 2485. Find the Pivot Integer (0) | 2024.03.13 |
[LeetCode] 1171. Remove Zero Sum Consecutive Nodes from Linked List (0) | 2024.03.12 |
[Leetcode] 791. Custom Sort String (0) | 2024.03.11 |