Skip to content

Instantly share code, notes, and snippets.

@alexislagante
Created November 4, 2015 15:30
Show Gist options
  • Save alexislagante/0c60de5e2d66fea548ac to your computer and use it in GitHub Desktop.
Save alexislagante/0c60de5e2d66fea548ac to your computer and use it in GitHub Desktop.
Longest Increasing Subsequence
function LIS(arr) {
var parent = [];
var lengths = [];
var globalMaxIndex = 0;
for(var i=0; i<arr.length; i++) {
var currMax = -1;
var currLen = 0;
for (var j=0; j<i; j++) {
if (arr[j]<arr[i] && (currMax == -1 || lengths[currMax]< lengths[j])) {
currMax = j;
}
}
parent.push(currMax);
if (currMax > -1){
currLen = lengths[currMax] + 1;
}
lengths.push(currLen);
if (currLen>lengths[globalMaxIndex]) {
globalMaxIndex = i;
}
}
var result = [];
do {
result.push(arr[globalMaxIndex]);
globalMaxIndex = parent[globalMaxIndex];
} while (globalMaxIndex > -1);
return result.reverse();
}
LIS([1,7,3,6,10,2,20,22])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment