2

Return the lowest index at which a value (second argument) should be inserted into an array (first argument) once it has been sorted. The returned value should be a number.

For example, getIndexToIns([1,2,3,4], 1.5) should return 1 because it is greater than 1 (index 0), but less than 2 (index 1).

Likewise, getIndexToIns([20,3,5], 19) should return 2 because once the array has been sorted it will look like [3,5,20] and 19 is less than 20 (index 2) and greater than 5 (index 1).

Solution:

function getIndexToIns(arr, num) {
  arr.sort((a, b) => a - b);

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

  return arr.length;
}

I don't understand the return arr.length and its purpose at the end? Why would we want to return the length of the array and not i, the index of the element in question?

Alireza Ahmadi
  • 8,579
  • 5
  • 15
  • 42
  • `getIndexToIns([1, 2, 3, 4], 5)` will return the length because `5` can't be placed and a new element should be added in the array – Cid Aug 21 '21 at 10:45
  • 1
    This loop checks if any element is greater or equal to the number. If so, it returns the index of this element, but is the whole loop will lopp throught and won't find any element to return, it will return the last index of the array plus 1 (which is the length of the array) – blazej Aug 21 '21 at 10:48
  • The last line is for inserting the new element at the end of the array in case, that `num` is greater than all existing elements in the array ... – derpirscher Aug 21 '21 at 10:49
  • `return i` ends the function, so if the loop ends up being greater than `num` the function will return `i` and the function will never reach `return arr.length`. – user11809641 Aug 21 '21 at 11:16

1 Answers1

2

That means num is greater than all values of arr and it's position in sorted array is the last one.

In other words you need to add num at the end of sorted array.

Let say arr=[1, 2, 3] and num = 4, so where do you want to add num? At position 3 that is arr.length.

Why would we want to return the length of the array and not i?

Because you don't access i after loop because of let.

If you want to use i instead of arr.length use var instead of let:

function getIndexToIns(arr, num) {
  arr.sort((a, b) => a - b);

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] >= num)
      return i;
  }

  return i;
}

See this: What's the difference between using “let” and “var”?

Alireza Ahmadi
  • 8,579
  • 5
  • 15
  • 42