ধরুন আমাদের কাছে ভোট নামক স্ট্রিংগুলির একটি তালিকা রয়েছে, এখানে প্রতিটি এন্ট্রি ছোট হাতের অক্ষরে রয়েছে এবং তারা সর্বোচ্চ থেকে সর্বনিম্ন পছন্দ পর্যন্ত প্রার্থীদের ভোটের প্রতিনিধিত্ব করছে। এখানে প্রার্থীর পদমর্যাদা নির্ভর করে সর্বোচ্চ পছন্দের উপর প্রাপ্ত ভোটের সংখ্যার উপর। এখন যদি টাই থাকে, তাহলে আমরা পরবর্তী সর্বোচ্চ পছন্দে প্রাপ্ত ভোটের সংখ্যা পরীক্ষা করব, ইত্যাদি। যদি এখনও বন্ধন থাকে, তাহলে তাদের বর্ণানুক্রমিকভাবে স্থান দেওয়া হবে। তাই আমাদের সর্বোচ্চ থেকে সর্বনিম্ন র্যাঙ্কিং পর্যন্ত দলগুলোর চূড়ান্ত র্যাঙ্কিং খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি ভোটের মত হয় =["zyx", "zxy", "xyz"], তাহলে আউটপুট হবে "zxy", যেহেতু z সর্বাধিক সংখ্যক সর্বোচ্চ পছন্দ পেয়েছে, তাই এটি প্রথম স্থান পেয়েছে। তারপর x দ্বিতীয় সর্বোচ্চ সংখ্যক সর্বোচ্চ পছন্দ পেয়েছে, এবং y কোনো সর্বোচ্চ পছন্দ ভোট পায়নি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- গণনা :=ভোটে স্ট্রিংয়ের দৈর্ঘ্য
- cand :=একটি খালি মানচিত্র যেখানে প্রতিটি কী আকার গণনার একটি তালিকা হবে এবং প্রাথমিকভাবে সেগুলি 0 দিয়ে পূর্ণ হবে
- প্রতিটি v ভোটের জন্য, করুন
- প্রতিটি সূচী i এবং v এর মান c এর জন্য, করুন
- ক্যান্ড[c, i] 1 দ্বারা বাড়ান
- মূল্যের উপর ভিত্তি করে ক্যান্ড আইটেমগুলিকে নিচের ক্রমানুসারে সাজান, যখন মান একই হয়, তখন সেগুলিকে বর্ণানুক্রমে সাজান
- বাছাই করা উপাদানগুলিকে সংযুক্ত করে একটি স্ট্রিং ফেরত দিন৷ ৷
- প্রতিটি সূচী i এবং v এর মান c এর জন্য, করুন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
from collections import defaultdict class Solution: def solve(self, votes): count = len(votes[0]) cand = defaultdict(lambda: [0] * count) for v in votes: for i, c in enumerate(v): cand[c][i] += 1 return "".join(sorted(cand.keys(), key=lambda x: (cand[x], -ord(x)), reverse=True)) ob = Solution() votes = ["zyx", "zxy", "xyz"] print(ob.solve(votes))
ইনপুট
["zyx", "zxy", "xyz"]
আউটপুট
zxy