সমস্যা বিবরণ
একটি ইন্টিজার লিস্ট দেওয়া থাকে। সর্টেড অর্ডারে তাদের পজিশন (র্যাঙ্ক) বের করুন।
উদাহরণ
listA = [78, 14, 0, 11] → আউটপুট: [3, 2, 0, 1]
সর্টেড: [0, 11, 14, 78] → ০-র ইনডেক্স ০, ১১-র ১, ১৪-র ২, ৭৮-র ৩।
পদ্ধতি ১: sorted() + index()
listA = [78, 14, 0, 11]
res = [sorted(listA).index(i) for i in listA]
print(res) # [3, 2, 0, 1]
সاده কিন্তু O(n²) — ডুপ্লিকেট থাকলে ভুল দেবে (index() প্রথম পজিশন দেবে)।
পদ্ধতি ২: enumerate() + sorted() + dict + map()
listA = [78, 14, 0, 11]
temp = {val: idx for idx, val in enumerate(sorted(listA))}
res = list(map(temp.get, listA))
print(res) # [3, 2, 0, 1]
O(n log n), ডুপ্লিকেট হ্যান্ডল করতে enumerate(sorted(set(listA))) ব্যবহার করুন।
আউটপুট
[3, 2, 0, 1]