[LeetCode] Number of Recent Calls

아르당·5일 전

LeetCode

목록 보기
202/211
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

특정 시간 범위 내의 최근 요청 수를 계산하는 RecentCounter 클래스가 있다.

RecentCounter 클래스를 구현해라.

  • RecentCounter()는 최근 요청 수를 0으로 초기화한다.
  • int ping(int t)는 시간 t에 새로운 요청을 추가하고, 지난 3000밀리 초 동안 발생한 요청수를 반환한다. 구체적으로, [t - 3000, t] 범위 내에서 발생한 요청 수를 반환한다.

ping을 호출할 때마다 이전 호출보다 엄격하게 더 큰 t값을 사용한다는 것이 보장된다.

Example

#1
Input: ["RecentCounter", "ping", "ping", "ping", "ping"][], [1], [100], [3001], [3002]]
Output: [null, 1, 2, 3, 3]
Explanation:
RecentCounter recentCounter = new RecentCounter();
recentCounter.ping(1); // requests = [1], range is [-2999,1], return 1
recentCounter.ping(100); // requests = [1, 100], range is [-2900,100], return 2
recentCounter.ping(3001); // requests = [1, 100, 3001], range is [1,3001], return 3
recentCounter.ping(3002); // requests = [1, 100, 3001, 3002], range is [2,3002], return 3

Constraints

  • 1 <= t <= 10^9
  • 각 테스트 케이스는 t값을 엄격하게 증가하는 값으로 설정하여 ping 함수를 호출한다.
  • 핑 테스트는 최대 104회 호출한다.

Solved

class RecentCounter {
    private static final int[] records = new int[10000];
    private int start;
    private int end;

    public RecentCounter() {
        start = 0;
        end = 0;
    }
    
    public int ping(int t) {
        while(start < end && (t - records[start] > 3000)){
            start++;
        }

        records[end++] = t;

        return end - start;
    }
}

/**
 * Your RecentCounter object will be instantiated and called as such:
 * RecentCounter obj = new RecentCounter();
 * int param_1 = obj.ping(t);
 */
profile
내 마음대로 코드 작성하는 세상

0개의 댓글