समस्या
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
उदाहरण
इनपुट:
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"].
इनपुट:
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 के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।