Leetcode: 992. Subarrays with K Different Integers

1002 단어 Leetcode알고리즘
URL : https://leetcode.com/problems/subarrays-with-k-different-integers/ 사고: 이 문 제 는 사실 코드 의 양 이 많 지 않 지만 생각 이 좋 지 않 습 니 다. 저 는 토론 을 보고 문득 깨 달 았 습 니 다.다음은 코드 를 드 리 겠 습 니 다.배열 에서 K 개의 서로 다른 숫자 가 가장 많이 나 오 는 조합 수 는 N 이 고 배열 에서 K - 1 개의 서로 다른 숫자 가 가장 많이 나 오 는 조합 수 는 M 이다. 우리 가 원 하 는 결 과 는 K 개의 서로 다른 조합 수 N - M 이 가장 많이 나 오 는 조합 수의 계산 방법 은 상대 적 으로 간단 하 다. 슬라이딩 창 을 사용 하면 창 안의 서로 다른 숫자 가 K 를 초과 하지 않 으 면 된다.
public int subarraysWithKDistinct(int[] A, int K) {
        return AtMost(A,K) - AtMost(A, K-1);
    }


    public int AtMost(int[]A, int k) {

        int[] map = new int[20001];
        int pre=0;int res=0;
        int count = 0;
        for (int i=0;i k) {
                int tmp = map[A[pre]];
                if (tmp == 1) {
                    res += i - pre;
                    count--;
                }
                map[A[pre++]]--;
            }
        }
        return res;
    }

좋은 웹페이지 즐겨찾기