LC每日一题|20240522 - 2225. 找出输掉零场或一场比赛的玩家

63 阅读1分钟

LC每日一题|20240522 - 2225. 找出输掉零场或一场比赛的玩家

给你一个整数数组 matches 其中 matches[i] = [winneri, loseri] 表示在一场比赛中 winneri 击败了 loseri

返回一个长度为 2 的列表 **answer

  • answer[0] 是所有 没有 输掉任何比赛的玩家列表。
  • answer[1] 是所有恰好输掉 一场 比赛的玩家列表。

两个列表中的值都应该按 递增 顺序返回。

注意:

  • 只考虑那些参与 至少一场 比赛的玩家。
  • 生成的测试用例保证 不存在 两场比赛结果 相同

提示:

  • 1 <= matches.length <= 10^5
  • matches[i].length == 2
  • 1 <= winner[i], loser[i] <= 10^5
  • winner[i] != loser[i]
  • 所有 matches[i] 互不相同

题目等级:Medium

解题思路

非常简单的哈希表应用题~

AC代码

class Solution {
    fun findWinners(matches: Array<IntArray>): List<List<Int>> {
        val map = HashMap<Int, Int>()
        matches.forEach {
            if (map[it[0]] == null) map[it[0]] = 0
            map[it[1]] = (map[it[1]] ?: 0) + 1
        }
        val res = listOf<ArrayList<Int>>(arrayListOf(), arrayListOf())
        map.forEach {
            if (it.value == 0) res[0].add(it.key)
            if (it.value == 1) res[1].add(it.key)
        }
        res[0].sort()
        res[1].sort()
        return res
    }
}

时间复杂度:O(nlogn)

空间复杂度:O(n)