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]);