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