สมมติว่าเรามีอาร์เรย์ที่มีองค์ประกอบบางอย่างซึ่งองค์ประกอบอาจปรากฏขึ้นหลายครั้ง เราต้องจัดเรียงอาร์เรย์เพื่อให้องค์ประกอบถูกจัดเรียงตามความถี่ที่เพิ่มขึ้น ดังนั้นองค์ประกอบใดปรากฏน้อยกว่า โดยจะมาก่อนเป็นลำดับ
ดังนั้น หากอินพุตเท่ากับ 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]