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

โปรแกรมจัดเรียงอาร์เรย์โดยเพิ่มความถี่ขององค์ประกอบใน Python


สมมติว่าเรามีอาร์เรย์ที่มีองค์ประกอบบางอย่างซึ่งองค์ประกอบอาจปรากฏขึ้นหลายครั้ง เราต้องจัดเรียงอาร์เรย์เพื่อให้องค์ประกอบถูกจัดเรียงตามความถี่ที่เพิ่มขึ้น ดังนั้นองค์ประกอบใดปรากฏน้อยกว่า โดยจะมาก่อนเป็นลำดับ

ดังนั้น หากอินพุตเท่ากับ nums =[1,5,3,1,3,1,2,5] ผลลัพธ์จะเป็น [2, 5, 5, 3, 3, 1, 1, 1]

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

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

  • สำหรับแต่ละองค์ประกอบที่แตกต่างกัน i จาก nums ทำ

    • x:=จำนวน i ที่แสดงเป็น nums

    • ถ้า x มีอยู่ใน mp แล้ว

      • ใส่ i ต่อท้าย mp[x]

    • มิฉะนั้น mp[x] :=รายการที่มีเพียงหนึ่งองค์ประกอบ i

  • ans:=รายการใหม่

  • สำหรับแต่ละ i ในการเรียงลำดับ mp ตามคีย์ ทำ

    • สำหรับแต่ละ j ในการเรียงลำดับรายการ mp[i] ในลำดับที่กลับกัน ทำ

      • ใส่ j, i จำนวนครั้งใน ans

  • กลับมาอีกครั้ง

ตัวอย่าง (Python)

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

def solve(nums):
   mp = {}
   for i in set(nums):
      x=nums.count(i)
      try:
         mp[x].append(i)
      except:
         mp[x]=[i]
   ans=[]

   for i in sorted(mp):
      for j in sorted(mp[i], reverse=True):
         ans.extend([j]*i)
   return ans

nums = [1,5,3,1,3,1,2,5]
print(solve(nums))

อินพุต

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

ผลลัพธ์

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