LeetCode in Kotlin

3680. Generate Schedule

Medium

You are given an integer n representing n teams. You are asked to generate a schedule such that:

Return a 2D integer array schedule, where schedule[i][0] represents the home team and schedule[i][1] represents the away team. If multiple schedules meet the conditions, return any one of them.

If no schedule exists that meets the conditions, return an empty array.

Example 1:

Input: n = 3

Output: []

Explanation:

Since each team plays every other team exactly twice, a total of 6 matches need to be played: [0,1],[0,2],[1,2],[1,0],[2,0],[2,1].

It’s not possible to create a schedule without at least one team playing consecutive days.

Example 2:

Input: n = 5

Output: [[0,1],[2,3],[0,4],[1,2],[3,4],[0,2],[1,3],[2,4],[0,3],[1,4],[2,0],[3,1],[4,0],[2,1],[4,3],[1,0],[3,2],[4,1],[3,0],[4,2]]

Explanation:

Since each team plays every other team exactly twice, a total of 20 matches need to be played.

The output shows one of the schedules that meet the conditions. No team plays on consecutive days.

Constraints:

Solution

class Solution {
    fun generateSchedule(n: Int): Array<IntArray> {
        if (n < 5) {
            return Array<IntArray>(0) { IntArray(0) }
        }
        val res = Array<IntArray>(n * (n - 1)) { IntArray(2) }
        var idx = 0
        for (i in 2..<n - 1) {
            for (j in 0..<n) {
                res[idx++] = intArrayOf(j, (j + i) % n)
            }
        }
        for (i in 0..<n) {
            res[idx++] = intArrayOf(i, (i + 1) % n)
            res[idx++] = intArrayOf((i + 4) % n, (i + 3) % n)
        }
        return res
    }
}