Bag of Tokens

MediumArrayTwo PointersGreedySorting

Solution

export function bagOfTokensScore(tokens: number[], power: number): number {
  tokens.sort((a, b) => a - b);
 
  let score = 0;
  let maxScore = 0;
  let remainPower = power;
  let [start, end] = [0, tokens.length - 1];
  while (start <= end) {
    if (tokens[start] <= remainPower) {
      remainPower -= tokens[start];
      score += 1;
      maxScore = Math.max(maxScore, score);
      start += 1;
    } else if (1 <= score) {
      remainPower += tokens[end];
      score -= 1;
      end -= 1;
    } else {
      return maxScore;
    }
  }
 
  return maxScore;
}