Computer >> Máy Tính >  >> Lập trình >> Python

K phần tử thường gặp hàng đầu trong Python

Giả sử chúng ta có một mảng các số nguyên không rỗng. chúng ta phải trả về k phần tử thường xuyên nhất. Vì vậy, nếu các phần tử là [1,1,1,1,2,2,3,3,3] và k =2, thì kết quả sẽ là

Về mặt chính thức, hàm nên -

  • Trả về true nếu tồn tại i, j, k
  • sao cho arr [i]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • num_freq =một bản đồ trống, freq_list:=một bản đồ trống
  • cho mỗi phần tử i trong nums
    • nếu tôi không thuộc num_freq, thì num_freq [i]:=1, nếu không, hãy tăng num_freq [i] lên 1
  • cho mỗi cặp khóa-giá trị trong bản đồ num_freq
    • nếu giá trị không có trong freq_list, thì freq_list [value]:=một danh sách có [key], nếu không thì chèn key vào mảng freq_list [value]
  • res:=danh sách trống
  • for i:=độ dài của các số đến 0
    • nếu tôi ở trong freq_list, thì hãy thêm các phần tử của freq_list [i] vào res
    • nếu độ dài của res> =k, thì ngắt
  • trả về kết quả

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

class Solution(object):
   def topKFrequent(self, nums, k):
      number_frequency = {}
      frequency_list ={}
      for i in nums:
         if i not in number_frequency:
            number_frequency[i] = 1
         else:
            number_frequency[i] += 1
      for key,value in number_frequency.items():
         if value not in frequency_list:
            frequency_list[value] = [key]
         else:
            frequency_list[value].append(key)
      result = []
      for i in range(len(nums),0,-1):
         if i in frequency_list:
            result.extend(frequency_list[i])
         if len(result) >=k:
            break
      return result
ob1 = Solution()
print(ob1.topKFrequent([1,1,1,1,2,2,3,3,3], 2))

Đầu vào

[1,1,1,1,2,2,3,3,3]
2

Đầu ra

[1, 3]