😎풀이

  1. 누적합과 해시맵을 활용, 1은 +1 0은 -1을 의미하도록 누적합 계산
  2. 누적합 결과가 같은 두 인덱스 사이의 비트는 1과 0의 개수가 동일함
  3. 따라서, 누적합 결과가 같은 두 인덱스 사이의 거리를 계산하며 최대 거리를 갱신
  4. 갱신된 최대 거리 반환
function findMaxLength(nums: number[]): number {
    const n = nums.length
    const map = new Map<number, number>()
    map.set(0, -1)
    let maxLen = 0
    let prefixSum = 0
    for(let i = 0; i < n; i++)     {
        const val = nums[i] === 1 ? 1 : -1
        prefixSum += val
        if(!map.has(prefixSum)) {
            map.set(prefixSum, i)
            continue
        }
        const prevIdx = map.get(prefixSum)
        const curLen = i - prevIdx
        maxLen = Math.max(maxLen, curLen)
    }
    return maxLen
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글