beats 100%   of users with dart(time & memory)
Intuition\n Describe your first thoughts on how to solve this problem. \n\n# Approach\n Describe your approach to solving the problem. \n\n# Complexity\n- Time 
# Intuition\n<!-- Describe your first thoughts on how to solve this problem. -->\n\n# Approach\n<!-- Describe your approach to solving the problem. -->\n\n# Complexity\n- Time complexity:\n<!-- Add your time complexity here, e.g. $$O(n)$$ -->\n\n- Space complexity:\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\nclass Solution {\n  List<int> circularGameLosers(int n, int k) {\n    Map winPlayers = {};\n    int newPlayer = 1;\n    int i = 1;\n    while (checkEnd(winPlayers, newPlayer)) {\n      winPlayers[newPlayer] = 1;\n      newPlayer = getNext(newPlayer, k * i, n);\n      i++;\n    }\n    List<int> loserPlayers = getLosers(winPlayers, n);\n    return loserPlayers;\n  }\n\n  List<int> getLosers(Map winPlayers, int maxPlayer) {\n    List<int> loserPlayers = [];\n    for (int i = 1; i <= maxPlayer; i++) {\n      if (!winPlayers.containsKey(i)) {\n        loserPlayers.add(i);\n      }\n    }\n    return loserPlayers;\n  }\n\n  bool checkEnd(Map winPlayers, int newPlayer) {\n    if (winPlayers[newPlayer] == 1) {\n      return false;\n    } else {\n      return true;\n    }\n  }\n\n  int getNext(int newPlayer, int steps, int maxPlayer) {\n    if (steps > maxPlayer) {\n      steps = steps % maxPlayer;\n    }\n    if (steps + newPlayer > maxPlayer) {\n      newPlayer = steps + newPlayer - maxPlayer;\n      return newPlayer;\n    }\n    newPlayer += steps;\n    return newPlayer;\n  }\n}\n```
['Dart']