No results found for the specified position. Create the card-power game. JavaScript Intermediate Level Greedy Mock Interview

MockQuestions

JavaScript Intermediate Level Greedy Mock Interview

Question 2 of 10 for our JavaScript Intermediate Level Greedy Mock Interview

Get More Information About Our JavaScript Intermediate Level Greedy Interview Questions

Question 2 of 10

Create the card-power game.

This question shows the developer's ability to work with JavaScript integers and arrays.

You invent a new single-player game- “The card-power game”. In this game, you are given an integer power and an array of cards initially. The value of cards[i] denotes the power required to play the ith card. Your score is 0 initially. You play a series of moves to maximize your score.

In one move, you choose the ith card with power cards[i]. You can play one in two ways:

1. Play card face up:- If your current power is at least cards[i], you play the ith card face up. Your power decreases by cards[i] and you gain 1 score.
2. Play card face down:- If your current score is at least 1, you play the ith card face down. Your power increases by cards[i] and you lose 1 score.

You can play a card at most once in any order. It may be the case that you don’t play some cards. Return your maximized score.

/*Example*/

Given: cards = [100, 200, 300, 400]		power = 200
Expected output:- 2
Explanation:
1.	Play 0th card face up		power = 100	score = 1
2.	Play 3rd card face down	power = 500	score = 0
3.	Play 1st card face up		power = 300	score = 1
4.	Play 2nd card face up		power = 0		score = 2

Solution:

We will play cards face up and face down greedily. First of all, we will sort the cards with their power in increasing order. We will play cards face up starting from the lowest power. If we need more power, we will play the card face down with the highest power.

/**
 * @param {number[]} cards
 * @param {number} power
 * @return {number}
 */
function maxScore(cards, power) {
    cards.sort((a, b) => a - b)
    
    let left = 0
    let right = cards.length - 1
    let score = 0
    let ans = 0
    
    while(left <= right && (power >= cards[left] || score > 0)) {
        // we have enough power to play lower cards face up
        // this will reduce power and increase score by 1
        while(left <= right && power >= cards[left]) {
            power -= cards[left]
            left++
            score++
        }
        
        ans = Math.max(ans, score)

        // play a higher card face down to increase power
        if (left <= right && score > 0) {
            power += cards[right]
            right--
            score--
        }
    }
    
    return ans
}

Time complexity- O(n logn) // to sort the array
Space complexity- O(1)

Written by on June 27th, 2021

Next Question

How to Answer: Create the card-power game.

Advice and answer examples written specifically for a JavaScript Intermediate Level Greedy job interview.

  • 2. Create the card-power game.

      This question shows the developer's ability to work with JavaScript integers and arrays.

      You invent a new single-player game- “The card-power game”. In this game, you are given an integer power and an array of cards initially. The value of cards[i] denotes the power required to play the ith card. Your score is 0 initially. You play a series of moves to maximize your score.

      In one move, you choose the ith card with power cards[i]. You can play one in two ways:

      1. Play card face up:- If your current power is at least cards[i], you play the ith card face up. Your power decreases by cards[i] and you gain 1 score.
      2. Play card face down:- If your current score is at least 1, you play the ith card face down. Your power increases by cards[i] and you lose 1 score.

      You can play a card at most once in any order. It may be the case that you don’t play some cards. Return your maximized score.

      /*Example*/
      
      Given: cards = [100, 200, 300, 400]		power = 200
      Expected output:- 2
      Explanation:
      1.	Play 0th card face up		power = 100	score = 1
      2.	Play 3rd card face down	power = 500	score = 0
      3.	Play 1st card face up		power = 300	score = 1
      4.	Play 2nd card face up		power = 0		score = 2

      Solution:

      We will play cards face up and face down greedily. First of all, we will sort the cards with their power in increasing order. We will play cards face up starting from the lowest power. If we need more power, we will play the card face down with the highest power.

      /**
       * @param {number[]} cards
       * @param {number} power
       * @return {number}
       */
      function maxScore(cards, power) {
          cards.sort((a, b) => a - b)
          
          let left = 0
          let right = cards.length - 1
          let score = 0
          let ans = 0
          
          while(left <= right && (power >= cards[left] || score > 0)) {
              // we have enough power to play lower cards face up
              // this will reduce power and increase score by 1
              while(left <= right && power >= cards[left]) {
                  power -= cards[left]
                  left++
                  score++
              }
              
              ans = Math.max(ans, score)
      
              // play a higher card face down to increase power
              if (left <= right && score > 0) {
                  power += cards[right]
                  right--
                  score--
              }
          }
          
          return ans
      }

      Time complexity- O(n logn) // to sort the array
      Space complexity- O(1)

      Written by S. Kumar on June 27th, 2021