Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาลำดับความถี่เทียบเท่าใน Python


สมมติว่าเรามีรายการตัวเลข เราต้องหาความยาวของลำดับตัวเลขที่ยาวที่สุด เช่น เมื่อเราลบตัวเลขออกจากลำดับ แต่ละหมายเลขจะมีจำนวนครั้งเท่ากัน

ดังนั้น หากอินพุตเหมือนกับตัวเลข =[2, 4, 4, 7, 7, 6, 6] ผลลัพธ์จะเป็น 7

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • num_freq :=แผนที่ใหม่

  • freq_freq :=แผนที่ใหม่

  • diff_freq :=ชุดใหม่

  • ผลลัพธ์ :=1

  • สำหรับแต่ละดัชนี I และค่า num เป็น nums ทำ

    • cur_freq :=num_freq[num]

    • num_freq[num] :=num_freq[num] + 1

    • freq_freq[cur_freq] :=freq_freq[cur_freq] − 1

    • freq_freq[cur_freq + 1] :=freq_freq[cur_freq + 1] + 1

    • เพิ่ม cur_freq + 1 ลงใน diff_freq

    • ถ้า cur_freq อยู่ใน diff_freq และ freq_freq[cur_freq] เท่ากับ 0 ดังนั้น

      • ลบ cur_freq ออกจาก diff_freq

    • df_list :=รายการใหม่โดยนำองค์ประกอบของ diff_freqs

    • ถ้าขนาดของ df_list เท่ากับ 1 แล้ว

      • ผลลัพธ์ :=i + 1

    • มิฉะนั้นเมื่อขนาดของ df_list เท่ากับ 2 และ (เมื่อใด ๆ ของ [|freq_freq[df_list[0]] - freq_freq[df_list[1]]|,freq_freq[df_list[0]], freq_freq[df_list[1]] ) คือ 1 ) และ (เมื่อมี [|df_list[0] -df_list[1]|, df_list[0], df_list[1]]) เป็น 1) แล้ว

      • ผลลัพธ์ :=i + 1

  • ส่งคืนผลลัพธ์

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

from collections import defaultdict
class Solution:
   def solve(self, nums):
      num_freq = defaultdict(int)
      freq_freq = defaultdict(int)
      diff_freq = set()
      result = 1
      for i, num in enumerate(nums):
         cur_freq = num_freq[num]
         num_freq[num] += 1
         freq_freq[cur_freq] −= 1
         freq_freq[cur_freq + 1] += 1
         diff_freq.add(cur_freq + 1)
         if cur_freq in diff_freq and freq_freq[cur_freq] == 0:
            diff_freq.remove(cur_freq)
         df_list = list(diff_freq)
         if len(df_list) == 1:
            result = i + 1
         elif (
            len(df_list) == 2
            and any(
               x == 1
               for x in [
                  abs(freq_freq[df_list[0]] − freq_freq[df_list[1]]),
                  freq_freq[df_list[0]],
                  freq_freq[df_list[1]],
               ]
            )
            and any(x == 1 for x in [abs(df_list[0] − df_list[1]), df_list[0], df_list[1]])
            ):
            result = i + 1
      return result
ob = Solution()
print(ob.solve([2, 4, 4, 7, 7, 6, 6]))

อินพุต

numbers = [2, 4, 4, 7, 7, 6, 6]

ผลลัพธ์

7