चुनौतियों पर वापस जाएँ
आसान 0 हल किए गए 0% स्वीकृति

चुनी गई कुंजी से सॉर्ट करें

एक comparer को run time पर चुनकर लोगों को name या age के अनुसार sort करें, और ties को consistently तोड़ें.

आप क्या सीखेंगे

  • रन टाइम पर सॉर्ट का क्रम चुनना
  • दूसरी की से बराबरी तोड़ना
  • स्ट्रिंग की ordinal क्रम में तुलना करना

समस्या

C# में, IComparer<T> एक interface है: कोई भी class जो इसका Compare method implement करती है, वह sort को बता सकती है कि कौन-सा item पहले आएगा. अलग comparer चुनने से sort बदले बिना order बदल जाता है.

लोगों को key के अनुसार sort करें:

  • name: name के अनुसार (ordinal character order, इसलिए uppercase letters lowercase से पहले आते हैं), और names समान होने पर age के अनुसार.
  • age: age के अनुसार, youngest first, और ages समान होने पर name के अनुसार.

sort_by_key(names, ages, key) implement करें.

Input

names, ages: लोग (same length).

key: "name" या "age".

Output

Sorted order में names return करें.

सीमाएँ

0 ≤ लोगों की संख्या ≤ 100,000

0 ≤ उम्र ≤ 150

उदाहरण

उदाहरण 1
इनपुट:
key = "age"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]

अपेक्षित आउटपुट:
expected = ["Bo", "Lin", "Ada"]
इनपुट:
std::string key = "age";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};

अपेक्षित आउटपुट:
std::vector<std::string> expected = {"Bo", "Lin", "Ada"};
इनपुट:
string key = "age";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};

अपेक्षित आउटपुट:
string[] expected = new string[] {"Bo", "Lin", "Ada"};

व्याख्या

Bo और Lin दोनों 30 हैं, इसलिए Ada (36) से पहले name के अनुसार ordered हैं: ["Bo", "Lin", "Ada"].

उदाहरण 2
इनपुट:
key = "name"
ages = [30, 36, 30]
names = ["Lin", "Ada", "Bo"]

अपेक्षित आउटपुट:
expected = ["Ada", "Bo", "Lin"]
इनपुट:
std::string key = "name";
std::vector<long long> ages = {30, 36, 30};
std::vector<std::string> names = {"Lin", "Ada", "Bo"};

अपेक्षित आउटपुट:
std::vector<std::string> expected = {"Ada", "Bo", "Lin"};
इनपुट:
string key = "name";
long[] ages = new long[] {30, 36, 30};
string[] names = new string[] {"Lin", "Ada", "Bo"};

अपेक्षित आउटपुट:
string[] expected = new string[] {"Ada", "Bo", "Lin"};

व्याख्या

वर्णानुक्रम: ["Ada", "Bo", "Lin"]।

कैसे हल करें

पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।

संकेत 1

दो अलग लिस्ट के बजाय (name, age) जोड़ियों को सॉर्ट करें।

संकेत 2

चुनी गई की मुख्य क्रम तय करती है; दूसरा फ़ील्ड बराबरी तोड़ता है।

संकेत 3

ordinal तुलना करें ताकि बड़े अक्षर छोटे अक्षरों से पहले आएँ।

अपेक्षित जटिलता

समय O(n log n), अतिरिक्त स्थान O(n)

संदर्भ

यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।