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ú
- Bạn có thể cho rằng k luôn hợp lệ, 1 ≤ k ≤ số phần tử duy nhất
- Các từ nhập chỉ chứa các chữ cái viết thường
Theo sát
- Cố gắng giải quyết nó trong thời gian O[nlogk] và không gian thêm O[n]
suy nghĩ
- 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
- 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ã