[제목] leetcode 매일 브러시 347 최고 K 자주 요소

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/m0_38103546/article/details/102763924

정수 비어 배열 주어 복귀  K에게  가장 빈번한 요소.

예 1 :

입력 : nums의 = [1,1,1,2,2,3], K = 2
 출력 : [1,2]

예 2 :

입력 : nums = [1], K = 1 개
 출력 : [1]

노트 :

  • 당신은 가정 할 수  k는  항상 유효 1 개 ≤  k 개의  독특한 요소 ≤ 번호.
  • 알고리즘의 시간 복잡도가  있어야합니다  (O보다 N  로그  N을 ), 여기서  n은  배열의 크기입니다.
class Solution {
    public ArrayList<Integer> topKFrequent(int[] nums, int k) {
        ArrayList<Integer> array = new ArrayList<Integer>();
        if(nums.length == 0) return array;
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for(int num: nums){
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        PriorityQueue<Integer> heap = new PriorityQueue<Integer>((n1, n2) -> map.get(n2) - map.get(n1));
        for(int num: map.keySet()){
            heap.add(num);
        }
        while(k-- > 0){
            array.add(heap.poll());
        }
        return array;
    }
}

지도 값을 사용하여 우선 순위 큐가 분류 한 다음 돈을 K 요소를 얻을 수있다.

추천

출처blog.csdn.net/m0_38103546/article/details/102763924