task-scheduler-ii

문제를 식별하고 재정의하십시오.

더보기

작업 스케줄러 ||

순서대로 완료해야 하는 작업을 나타내는 양의 정수 작업 인덱스가 0인 배열을 얻습니다.

여기서 tasks(i)는 i번째 작업의 유형을 나타냅니다.

또한 동일한 유형의 다른 작업을 수행하기 전에
작업이 완료된 후 경과해야 하는 최소 일 수를 나타내는 양의 정수 공백이 지정됩니다.

모든 작업이 완료될 때까지 매일 다음 중 하나를 수행해야 합니다.

작업에서 다음 작업을 완료하거나 브레이크를 밟아야 합니다.

모든 작업을 완료하는 데 필요한 최소 일수를 반환합니다.

만약 공간 3
XX 1일
1 2
1 2 (2)
1 2 3 4 5 6 -> 6
장소 3
1,2,1,2,1,2,1,2
1 2(_) _ _ 1
1 2 1 2 3 1
배열 인덱싱 및 중복 요소 간격 필요

데이터 구조 및 알고리즘 설계

더보기

1 <= 작업.길이 <= 10^5 (100,000)
1 <= 작업(i) <= 10^9(십억(Gig))
1 <= 공백 <= 작업 길이

해시 테이블
1(0.2.5)
2 (1.3)
3 (4)

0(1)/2(1)/5(1)
1(1)/3(1)
4(1)
각 작업 일수 + 휴무일
->
if (중복 작업) + 휴식 시간
공간은 3이지만 가능한 데이터에 대한 어레이의 IDX는 +1 + 공간입니다.

1 2 대 1 2 3 대 1
1 2 3 4 5 6 7 8 9
_____
_____
_____

1위
1 1 1 1 1
1 대 1 대 1 대 1 대 1

1,2,1,2,3,1
->
키(1, 값((0,2,5)))3-(2-0) > -1
키(2, 값((1,3)))
키(3, 값((4)))

화신

class Solution {
    public long taskSchedulerII(int() tasks, int space) {
        long days = 0;
        space++;
        HashMap<Integer, Long> lastOccurence = new HashMap<>();
        for (int i = 0; i < tasks.length; i++) {
            if (lastOccurence.containsKey(tasks(i))) {
                long lastTimeOccurred = lastOccurence.get(tasks(i));
                long daysDifference = days - lastTimeOccurred;
                if (daysDifference < space) {
                    days += (space - daysDifference);
                }
            }
            lastOccurence.put(tasks(i), days);
            days++;
        }
        return days;
    }
    
}

검토

https://leetcode-in-java.github.io/src/main/java/g2301_2400/s2365_task_scheduler_ii/

LeetCode-in-Java.github.io

LeetCode 알고리즘 문제에 대한 Java 솔루션은 지속적으로 업데이트됩니다.

leetcode-in-java.github.io

위의 솔루션을 사용하여 문제를 해결했습니다.

키워드 해쉬 테이블을 봤을 때 요소 값을 키로 추가해서 리스트에 값을 넣어 표현해볼까 하는 생각까지 해봤고, 리스트 값 사이의 간격이 공백보다 작다면 그런 생각까지 했다.
날짜에 추가하지만 해시 맵에 포함 키 -> if (diff < space ) 쓰는 방법을 기억할 수 없습니다.

나는 마침내 대답을 보았다.
너무 죄송해서 머리가 비었을 때 다시 풀어보도록 하겠습니다.
( space + 1 ) 그렇게 생각해본 적 없음