https://leetcode.com/problems/relative-ranks | Easy |
---|
Дан массив score, где score[i] — это результат спортсмена с индексом i. Нужно присвоить каждому спортсмену его ранг. Ранг определяется следующим образом:
• Наибольший результат получает “Gold Medal”.
• Второй по величине результат получает “Silver Medal”.ё
• Третий по величине результат получает “Bronze Medal”.
• Все остальные результаты получают свои ранги в виде строки с их местом.
Верни массив answer, где answer[i] — это ранг спортсмена с индексом i.
Input:
score = [5, 4, 3, 2, 1]Output:
[“Gold Medal”, “Silver Medal”, “Bronze Medal”, “4”, “5”]Explanation:
Наибольший результат — 5 (Gold Medal), затем 4 (Silver Medal), затем 3 (Bronze Medal), и остальные ранжируются соответственно.
Input:
score = [10, 3, 8, 9, 4]Output:
[“Gold Medal”, “5”, “Bronze Medal”, “Silver Medal”, “4”]Explanation:
10 получает “Gold Medal”, 9 — “Silver Medal”, 8 — “Bronze Medal”. Остальные: 4 — “4”, 3 — “5”.
fun findRelativeRanks(score: IntArray): Array<String> {
// Массив для хранения результата
val result = Array(score.size) { "" }
// Копируем массив и сортируем его вручную по убыванию
val sortedScores = score.clone()
for (i in 0 until sortedScores.size - 1) {
for (j in i + 1 until sortedScores.size) {
if (sortedScores[i] < sortedScores[j]) {
val temp = sortedScores[i]
sortedScores[i] = sortedScores[j]
sortedScores[j] = temp
}
}
}
// Записываем ранги в результат, используя индекс исходного массива
for (i in sortedScores.indices) {
val rank = when (i) {
0 -> "Gold Medal"
1 -> "Silver Medal"
2 -> "Bronze Medal"
else -> (i + 1).toString()
}
// Находим индекс текущего элемента в исходном массиве и присваиваем ему ранг
for (j in score.indices) {
if (score[j] == sortedScores[i]) {
result[j] = rank
break
}
}
}
return result
}
O(n²), так как используется ручная сортировка.