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²), так как используется ручная сортировка.

Пространственная сложность