LeetCode Problem - Link



Problem

A school is trying to take an annual photo of all the students. The students are asked to stand in a single file line in non-decreasing order by height. Let this ordering be represented by the integer array expected where expected[i] is the expected height of the ith student in line.

You are given an integer array heights representing the current order that the students are standing in. Each heights[i] is the height of the ith student in line (0-indexed).

Return the number of indices where heights[i] != expected[i].

 

Example 1:


Input: heights = [1,1,4,2,1,3]
Output: 3
Explanation: 
heights:  [1,1,4,2,1,3]
expected: [1,1,1,2,3,4]
Indices 2, 4, and 5 do not match.



Simple Loop Solution

/**
 * @param {number[]} heights
 * @return {number}
 */
var heightChecker = function (heights) {
    // making a copy
    let unsorted_heights = heights.map(a => a)


    // sort the array
    heights.sort((a, b) => { return a - b })


    // counter to track and return
    let count = 0;


    for (var i = 0; i < heights.length; i++) {
        if (unsorted_heights[i] != heights[i]) {
            count += 1
        }
    }


    return count;
};