JSFiddle - React, Tailwind, and code Playground

by Ali Soltani

JavaScript

function longestIncreasingSequence(arr, strict) {

    var index = 0,
      indexWalker,
    	longestIncreasingSequence,
    	i,
    	il,
    	j;

    // start by putting a reference to the first entry of the array in the sequence
    indexWalker = [index];
    	
    // Then walk through the array using the following methodolgy to find the index of the final term in the longestIncreasing and
    // a sequence (which may need altering later) which probably, roughly increases towards it - http://en.wikipedia.org/wiki/Longest_increasing_subsequence#Efficient_algorithms
	for (i = 1, il = arr.length; i < il; i++) {
		
        if (arr[i] < arr[indexWalker[index]]) {
         	
         	// if the value is smaller than the last value referenced in the walker put it in place of the first item larger than it in the walker
        	for (j = 0; j <= index; j++) {

            	// As well as being smaller than the stored value we must either 
            	// - be checking against the first entry
            	// - not be in strict mode, so equality is ok
            	// - be larger than the previous entry
                if (arr[i] < arr[indexWalker[j]] && (!strict || !j || arr[i] > arr[indexWalker[j-1]])) {
                    indexWalker[j] = i;
                    break;
                }
            }

        // If the value is greater than [or equal when not in strict mode) as the last in the walker append to the walker
        } else if (arr[i] > arr[indexWalker[index]] || (arr[i] === arr[indexWalker[index]] && !strict))  {
            indexWalker[++index] = i;
        }
		
    }

    // Create an empty array to store the sequence and write the final term in the sequence to it
	longestIncreasingSequence = new Array(index + 1);
	longestIncreasingSequence[index] = arr[indexWalker[index]];


	// Work backwards through the provisional indexes stored in indexWalker checking for consistency
	for (i = index - 1; i >= 0; i--) {

		// If the index stored is smaller than the...