Ope Afolabi
Ope Afolabi

Reputation: 5

How do I pass this algorithm challenge?

I am working through freecodecamp's basic algorithm challenges. The challenge is to return the largest number in an array. Here's the code.

function largestOfFour(arr) {
  // You can do this!
  let largestWord = [0,0,0,0];

  for(let i = 0; i < arr.length; i++) {
    for(let j = 0; j < arr[i].length; j++) {
      if(arr[i][j] > largestWord[i]) {
        largestWord[i] = arr[i][j];
      }
    }
  }
  return largestWord;
}

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

I have passed three of the criteria:

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]) should return an array. Passed largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]) should return [27, 5, 39, 1001]. Passed largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]) should return [9, 35, 97, 1000000].

All except largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]]) should return [25, 48, 21, -3].

Where did I go wrong?

Upvotes: 0

Views: 131

Answers (3)

praizjosh
praizjosh

Reputation: 142

I know it's been a while this question was asked but I just thought to add a more systematic approach for anyone who loves to know how things work in a more granular terms.

function largestOfFour(arr) {
  // Initialize an empty array object
  let array = [];

  // Loop over each sub-array from the 'arr' argument passed into the largestOfFour function
  for (let index = 0; index < arr.length; index++) {
    const num = arr[index];

    // Sort the numbers in the sub-arrays in descending order (from highest to lowest)
    num.sort((a, b) => b - a);

    // Push the sorted items into the empty array
    array.push(num[0]);
  }

  return array;
}

console.log(largestOfFour([
  [4, 5, 1, 3],
  [13, 27, 18, 26],
  [32, 35, 37, 39],
  [1000, 1001, 857, 1]
])); // Output: [5, 27, 39, 1001]

Upvotes: 0

Chamika
Chamika

Reputation: 167

So in your code you went wrong in this block.

 if(arr[i][j] > largestWord[i]) {
    largestWord[i] = arr[i][j];
 }

The thing you forgot was you have a starting value for the largest number which is 0 and you compare array elements with that value. Only a value exceeds 0 going to replace that. So I would suggest just to initialize the array without values and do a check for that

//initialize the array without a value
let largestWord = new Array(4);

for(let i = 0; i < arr.length; i++) {
  for(let j = 0; j < arr[i].length; j++) {

    //also add a check for initial value
    if(arr[i][j] > largestWord[i] || largestWord[i] == undefined) {
     largestWord[i] = arr[i][j];
    }
  }
}

Upvotes: 1

Shiny
Shiny

Reputation: 5055

Seems you can do this a lot easier with .map() and Math.max()

function largestOfFour(arr) {  
  return arr.map(x => Math.max(...x));
}

console.log(largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]));
console.log(largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]]));

Upvotes: 0

Related Questions