Longest increasing subsequence: Difference between revisions

Added JavaScript Patience sorting method
(Added JavaScript Patience sorting method)
Line 1,402:
 
return lis;
}
 
console.log(getLongestIncreasingSubsequence([0, 7, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]));
console.log(getLongestIncreasingSubsequence([3, 2, 6, 4, 5, 1]));
</lang>
 
{{out}}
<pre>
[ 0, 2, 6, 9, 11, 15 ]
[ 2, 4, 5 ]
</pre>
 
===Patience sorting===
<lang JavaScript>function getLIS(input) {
if (input.length === 0) {
return 0;
}
 
const piles = [input[0]];
 
for (let i = 1; i < input.length; i++) {
const leftPileIdx = binarySearch(piles, input[i]);
 
if (leftPileIdx !== -1) {
piles[leftPileIdx] = input[i];
} else {
piles.push(input[i]);
}
}
 
return piles.length;
}
 
function binarySearch(arr, target) {
let lo = 0;
let hi = arr.length - 1;
 
while (lo <= hi) {
const mid = lo + Math.floor((hi - lo) / 2);
 
if (arr[mid] >= target) {
hi = mid - 1;
} else {
lo = mid + 1;
}
}
 
return lo < arr.length ? lo : -1;
}