LeetCode 347. 앞의 K 고주파 원소

제목.
빈 정수 그룹 을 지정 하고 주파수 가 나 오기 전에 k 가 높 은 요 소 를 되 돌려 줍 니 다.
예시 1:
  : nums = [1,1,1,2,2,3], k = 2
  : [1,2]

예시 2:
  : nums = [1], k = 1
  : [1]

설명:
4. 567917. 주어진 k 가 항상 합 리 적 이 고 1 ≤ k ≤ 배열 에서 서로 다른 요소 의 개 수 를 가정 할 수 있 습 니 다
4. 567917. 당신 의 알고리즘 은 시간 복잡 도가 O (n log n) 보다 높 아야 합 니 다. n 은 배열 의 크기 입 니 다
해제
제 코드 사 고 는 주로 사전 기록 어 - 주파수 쌍 을 사용 한 다음 에 체인 법 으로 하 쉬 표 로 역방향 으로 저장 하 는 동시에 빈 도 를 하나의 list 로 저장 하고 높 은 것 에서 낮은 순서 로 각각 반대 방향 으로 가 는 하 쉬 표 에서 찾 습 니 다. 같은 주파수 의 것 은 한 번 만 찾 고 마지막 에 출력 하 며 시간 복잡 도 는 nlogn 이 어야 합 니 다. 주로 정렬 복잡 도 입 니 다.코드 는 다음 과 같 습 니 다:
class Solution(object):
    def topKFrequent(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: List[int]
        """
        result = []
        values = []
        reversehashtable = {}
        hashtable = {}
        for i in range(len(nums)):
            hashtable[nums[i]] = hashtable.get(nums[i],0) + 1
        for key in hashtable:
            reversehashtable[hashtable[key]] = reversehashtable.get(hashtable[key],[])
            reversehashtable[hashtable[key]].append(key)
            values.append(hashtable[key])
        print(values)
        values.sort(reverse = True)
        #print(hashtable, reversehashtable)
        for i in range(k):
            if i == 0:
                result.extend(reversehashtable[values[i]])
            if values[i] != values[i-1] and i > 0 :
                result.extend(reversehashtable[values[i]])
            if values[i] == values[i-1] and i > 0:
                continue
        return result

토론 구역
하나의 생각 은 해시 표를 만 든 후에 더미 로 앞의 k 개 를 실현 하 는 것 이기 때문에 쌓 인 복잡 도 는 nlogn 이다.

좋은 웹페이지 즐겨찾기