From e6c4d611b33a5dd705f06ca466ab3873c65d8140 Mon Sep 17 00:00:00 2001 From: shola <michael.o.situ@gmail.com> Date: Wed, 21 Aug 2024 23:53:28 -0700 Subject: [PATCH 1/3] Return longestIncreasingSubsequence from dpLongestIncreasingSubsequence --- .../dpLongestIncreasingSubsequence.test.js | 23 ++++--------------- .../dpLongestIncreasingSubsequence.js | 17 ++++++++++++-- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js b/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js index 13160b6192..09cca6a8ce 100644 --- a/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js +++ b/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js @@ -2,35 +2,20 @@ import dpLongestIncreasingSubsequence from '../dpLongestIncreasingSubsequence'; describe('dpLongestIncreasingSubsequence', () => { it('should find longest increasing subsequence length', () => { - // Should be: - // 9 or - // 8 or - // 7 or - // 6 or - // ... expect(dpLongestIncreasingSubsequence([ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, - ])).toBe(1); + ])).toStrictEqual([9]); - // Should be: - // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 expect(dpLongestIncreasingSubsequence([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - ])).toBe(10); + ])).toStrictEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); - // Should be: - // -1, 0, 2, 3 expect(dpLongestIncreasingSubsequence([ 3, 4, -1, 0, 6, 2, 3, - ])).toBe(4); + ])).toStrictEqual([-1, 0, 2, 3]); - // Should be: - // 0, 2, 6, 9, 11, 15 or - // 0, 4, 6, 9, 11, 15 or - // 0, 2, 6, 9, 13, 15 or - // 0, 4, 6, 9, 13, 15 expect(dpLongestIncreasingSubsequence([ 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15, - ])).toBe(6); + ])).toStrictEqual([0, 2, 6, 9, 11, 15]); }); }); diff --git a/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js b/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js index e5f2ec6dbf..dcb0614916 100644 --- a/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js +++ b/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js @@ -3,7 +3,7 @@ * Complexity: O(n * n) * * @param {number[]} sequence - * @return {number} + * @return {number[]} */ export default function dpLongestIncreasingSubsequence(sequence) { // Create array with longest increasing substrings length and @@ -49,5 +49,18 @@ export default function dpLongestIncreasingSubsequence(sequence) { } } - return longestIncreasingLength; + // Construct the longest increasing subsequence from the back to the front + let rightIndex = lengthsArray.findIndex((item) => item === longestIncreasingLength); + const longestIncreasingSubsequence = []; + + while (rightIndex > -1) { + const leftIndex = lengthsArray.findLastIndex((item, idx) => ( + item === lengthsArray[rightIndex] - 1 && idx < rightIndex + )); + + longestIncreasingSubsequence.unshift(sequence[rightIndex]); + rightIndex = leftIndex; + } + + return longestIncreasingSubsequence; } From fcad8fa25b74554bc4240784a243c3e0121ef061 Mon Sep 17 00:00:00 2001 From: shola <michael.o.situ@gmail.com> Date: Thu, 22 Aug 2024 00:06:33 -0700 Subject: [PATCH 2/3] fix: whitespace --- .../dpLongestIncreasingSubsequence.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js b/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js index dcb0614916..c7a60be841 100644 --- a/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js +++ b/src/algorithms/sets/longest-increasing-subsequence/dpLongestIncreasingSubsequence.js @@ -55,7 +55,7 @@ export default function dpLongestIncreasingSubsequence(sequence) { while (rightIndex > -1) { const leftIndex = lengthsArray.findLastIndex((item, idx) => ( - item === lengthsArray[rightIndex] - 1 && idx < rightIndex + item === lengthsArray[rightIndex] - 1 && idx < rightIndex )); longestIncreasingSubsequence.unshift(sequence[rightIndex]); From 476a47e05e25849cf66ae42eeee102cdfeb1569f Mon Sep 17 00:00:00 2001 From: shola <michael.o.situ@gmail.com> Date: Thu, 22 Aug 2024 00:11:38 -0700 Subject: [PATCH 3/3] fix: update test label to reflect new function results --- .../__test__/dpLongestIncreasingSubsequence.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js b/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js index 09cca6a8ce..a039a84928 100644 --- a/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js +++ b/src/algorithms/sets/longest-increasing-subsequence/__test__/dpLongestIncreasingSubsequence.test.js @@ -1,7 +1,7 @@ import dpLongestIncreasingSubsequence from '../dpLongestIncreasingSubsequence'; describe('dpLongestIncreasingSubsequence', () => { - it('should find longest increasing subsequence length', () => { + it('should find longest increasing subsequence', () => { expect(dpLongestIncreasingSubsequence([ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, ])).toStrictEqual([9]);