hsskey / algorithm-practice

🧑‍💻 Solving algorithms to level up
0 stars 0 forks source link

Longest Consecutive Sequence #8

Open hsskey opened 1 month ago

hsskey commented 1 month ago

Longest Consecutive Sequence

정렬되어 잇지 않은 정수형 배열 nums가 주어졌다. nums 원소를 가지고 만들 수 있는 가장 긴 연속된 수의 갯수는 몇개인지 반환하시오.

📝 제약조건

💡 예시

문제 해결 과정

Step 1: 문제 이해하기

Step 2: 접근 방법

// (next in nums) * while문 * for문 → O(n^3)  
for i range(n):
  while next in nums: // 해당 조건문은 포인터가 배열의 요소를 가리키며 움직이면서 찾는과정을 의미
    count += 1
    next += 1

Step 3: 코드 설계

Step 4: 코드 구현

function longestConsecutive(nums) {
    if(nums.length === 0) return 0
    const dict = {}
    let longest = 0
    for(let num of nums) {
        dict[num] = true
    }
    for(let num in dict) {
        let parsedNum = Number(num)
        if(!((parsedNum - 1) in dict)) {
            let cnt = 1
            while(parsedNum + 1 in dict) {
                cnt += 1
                parsedNum++
            }
            longest = Math.max(cnt, longest)
        }
    }
    return longest
}

console.log(longestConsecutive([0, 1, 2, 3, 4, 5, 6, 7, ,8]))
hsskey commented 1 month ago

sort를 이용한 풀이

function longestConsecutive(nums) {
    if(nums.length === 0) return 0
    const setNums = [...new Set(nums)]

    setNums.sort((a, b) => a - b)

    let longest = 0

    for(let i = 0; i < setNums.length; i++) {
        let cnt = 1
        while(true) {
            if(!setNums[i + 1] || setNums[i] + 1 !== setNums[i + 1]) {
                break
            }
            cnt++
            i++
        }
        longest = Math.max(cnt, longest)
    }
    return longest
}