[LeetCode] 2765. Longest Alternating Subarray

Chobby·약 8시간 전

LeetCode

목록 보기
793/800

😎풀이

  1. 교차배열 검증 헬퍼함수 정의
  2. nums 배열 슬라이딩 윈도우 사용
    2-1. 현재 윈도우가 교차 배열인지 검증
    2-2. 교차 배열이라면, 최대 길이 갱신
  3. 단일 배열이거나, 교차할 요소가 없다면 -1 반환
  4. 탐색된 교차배열 중 가장 긴 배열의 길이 반환
function alternatingSubarray(nums: number[]): number {
    let longest = 0
    for(let left = 0; left < nums.length; left++) {
        for(let right = left; right < nums.length; right++) {
            const window = nums.slice(left, right + 1)
            if(!isAlternate(window)) break
            longest = Math.max(longest, window.length)
        }
    }
    if(longest < 2) return -1
    return longest
};

function isAlternate(nums: number[]) {
    if(nums.length < 2) return true
    const first = nums[0]
    const second = nums[1]
    if((second - first) !== 1) return false
    for(let i = 0; i < nums.length; i += 2) {
        if(nums[i] !== first) return false
    }
    for(let i = 1; i < nums.length; i += 2) {
        if(nums[i] !== second) return false
    }
    return true
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글