Hàng đầu k từ thường xuyên javascript

Câu trả lời của bạn nên được sắp xếp theo tần suất từ ​​cao nhất đến thấp nhất. Nếu hai từ có cùng tần suất, thì từ có thứ tự bảng chữ cái thấp hơn sẽ xuất hiện trước

ví dụ 1

Input:
 ["i", "love", "leetcode", "i", "love", "coding"], k = 2

Output:
 ["i", "love"]

Explanation:
 "i" and "love" are the two most frequent words.
    Note that "i" comes before "love" due to a lower alphabetical order.

ví dụ 2

Input:
 ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4

Output:
 ["the", "is", "sunny", "day"]

Explanation:
 "the", "is", "sunny" and "day" are the four most frequent words,
    with the number of occurrence being 4, 3, 2 and 1 respectively.

Ghi chú

  1. Bạn có thể cho rằng k luôn hợp lệ, 1 ≤ k ≤ số phần tử duy nhất
  2. Các từ nhập chỉ chứa các chữ cái viết thường

Theo sát

  1. Cố gắng giải quyết nó trong thời gian O[nlogk] và không gian thêm O[n]

suy nghĩ

  1. Tùy chỉnh sắp xếp. đầu tiên sắp xếp số lượng theo thứ tự giảm dần, sau đó sắp xếp tên theo thứ tự tăng dần
  2. O[nlogk] thời gian và O[n] không gian thêm. sử dụng một đống để giữ k từ hàng đầu trong đống

Mã số. Sắp xếp. t. O[nlogn]; . Trên]

Mã số. đống

class Solution[object]:
    def topKFrequent[self, words, k]:
        """
        :type words: List[str]
        :type k: int
        :rtype: List[str]
        """
        d = collections.defaultdict[int]
        for word in words:
            d[word] +=1

        queue = []

        for word, count in d.items[]:
            heapq.heappush[queue, Element[count, word]]
            if len[queue] > k:
                heapq.heappop[queue]

        return [heapq.heappop[queue].word for _ in range[k]][::-1]


class Element[object]:
    def __init__[self, count, word]:
        self.word = word
        self.count = count

    def __lt__[self, other]:
        if self.count == other.count:
            return self.word > other.word
        return self.count < other.count

    def __eq__ [self, other]:
        return self.count == other.count and self.word == other.word

Mã số. Đống Java

Mã số. Đống C++

Trong bài toán K từ thường xuyên hàng đầu, chúng tôi đã đưa ra một danh sách các từ và một số nguyên k. In ra k chuỗi được sử dụng thường xuyên nhất trong danh sách

Mục lục

  • Thí dụ
  • Giải thích cho các từ thông dụng hàng đầu K
  • Thuật toán cho K từ thường xuyên hàng đầu
  • Chương trình C++ để tìm k từ thường xuyên hàng đầu
  • Chương trình Java để tìm k từ thường xuyên hàng đầu

Thí dụ

Đầu vào

list = {“code”, “sky”, “pen”, “sky”, “sky”, “blue”, “code”}

k = 2

đầu ra.  

bầu trời

mã số

Đầu vào

danh sách = {"có", "không", "có", "có"}

k = 1

đầu ra.  

Vâng

Giải thích cho các từ thông dụng hàng đầu K

Đặt danh sách đã cho = {“cpp”, “java”, “java”, “cpp”, “python”, “java”, “cpp”, “kotlin”, “kotlin”, “java”} và k = 3

Giải pháp LeetCode hàng đầu K từ thông dụng

Báo cáo vấn đề

Giải pháp LeetCode cho các từ thông dụng hàng đầu của K – Cho một mảng các chuỗi words và một số nguyên k, trả về các k chuỗi phổ biến nhất

Trả về câu trả lời được sắp xếp theo tần suất từ cao nhất đến thấp nhất. Sắp xếp các từ có cùng tần số xuất hiện theo thứ tự từ điển của chúng

Thí dụ

Trường hợp thử nghiệm 1

Đầu vào

words = [“i”,”love”,”leetcode”,”i”,”love”,”coding”]

k = 2

đầu ra

["tôi yêu"]

Giải trình

“i” và “love” là hai từ được dùng nhiều nhất. Lưu ý rằng “i” đứng trước “love” do thứ tự chữ cái thấp hơn

Tiếp cận

đây là cấu trúc so sánh cho 2 điều kiện

1- giữ thứ tự giảm dần [tần suất cao nhất trước trong hàng đợi ưu tiên]

2- nếu 2 từ có cùng tần số thì so sánh 2 chuỗi

Câu hỏi này có thể được giải quyết bằng cách duy trì HashMap để đếm tần suất của các từ và hàng đợi ưu tiên [min-heap] để có được K Từ thường dùng hàng đầu

Xác định một lớp để lưu trữ từ và tần số của nó. Triển khai phương thức so sánh được sử dụng bởi minHeap để sắp xếp và lưu trữ đối tượng trong heap. Mẹo để giải quyết câu hỏi này nằm ở phương thức so sánh này

Câu hỏi yêu cầu chúng tôi trả lại các từ hàng đầu theo thứ tự từ điển nếu chúng có cùng tần số. Vì vậy, hãy lưu trữ các từ trong min-heap theo cách sao cho các từ có cùng tần số được lưu trữ theo thứ tự từ điển ngược lại, để bất cứ khi nào chúng ta bắt gặp một từ có cùng tần số, chúng ta sẽ bật ra từ xuất hiện

Trong lần triển khai sau, tôi sử dụng lớp Map.Entry một cách chuyên sâu. Do đó, giữ các thông tin  cùng nhau bất cứ khi nào tôi cần chúng, nâng cao hiệu quả của mã

Chủ Đề