diff --git a/jump-game/nhistory.js b/jump-game/nhistory.js new file mode 100644 index 000000000..edc30a903 --- /dev/null +++ b/jump-game/nhistory.js @@ -0,0 +1,12 @@ +var canJump = function (nums) { + let pointer = 0; + for (let i = 0; i < nums.length; i++) { + if (i > pointer) return false; + pointer = Math.max(pointer, i + nums[i]); + if (pointer >= nums.length - 1) return true; + } + return false; +}; + +// TC: O(n) +// SC: O(1) diff --git a/longest-common-subsequence/nhistory.js b/longest-common-subsequence/nhistory.js new file mode 100644 index 000000000..7282d3e6d --- /dev/null +++ b/longest-common-subsequence/nhistory.js @@ -0,0 +1,24 @@ +var longestCommonSubsequence = function (text1, text2) { + // Edge case + if (text1.length === 1 && text2.length === 1 && text1 === text2) return 1; + + let dp = Array.from({ length: text1.length + 1 }, () => + Array(text2.length + 1).fill(0) + ); + + for (let i = 1; i <= text1.length; i++) { + for (let j = 1; j <= text2.length; j++) { + if (text1[i - 1] === text2[j - 1]) { + dp[i][j] = dp[i - 1][j - 1] + 1; + } else { + dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); + } + } + } + + return dp[text1.length][text2.length]; +}; + +// m = text1.length | n = text2.length +// TC: O(m*n) +// SC: O(m*n) diff --git a/longest-increasing-subsequence/nhistory.js b/longest-increasing-subsequence/nhistory.js new file mode 100644 index 000000000..d1cad5851 --- /dev/null +++ b/longest-increasing-subsequence/nhistory.js @@ -0,0 +1,16 @@ +var lengthOfLIS = function (nums) { + if (nums.length === 1) return 1; + let dp = new Array(nums.length).fill(1); + + for (let i = 0; i < nums.length; i++) { + for (let j = 0; j < i; j++) { + if (nums[i] > nums[j]) { + dp[i] = Math.max(dp[i], dp[j] + 1); + } + } + } + return Math.max(...dp); +}; + +// TC: O(n^2) +// SC: O(n) diff --git a/maximum-subarray/nhistory.js b/maximum-subarray/nhistory.js new file mode 100644 index 000000000..229c7ea0e --- /dev/null +++ b/maximum-subarray/nhistory.js @@ -0,0 +1,17 @@ +var maxSubArray = function (nums) { + // Edge case + if (nums.length === 1) return nums[0]; + + let maxSum = nums[0]; + let curSum = nums[0]; + + for (let i = 1; i < nums.length; i++) { + curSum = Math.max(nums[i], curSum + nums[i]); + maxSum = Math.max(maxSum, curSum); + } + + return maxSum; +}; + +// TC: O(n) +// SC: O(1) diff --git a/unique-paths/nhistory.js b/unique-paths/nhistory.js new file mode 100644 index 000000000..76b694d23 --- /dev/null +++ b/unique-paths/nhistory.js @@ -0,0 +1,16 @@ +var uniquePaths = function (m, n) { + // Edge case + if (m === 1 || n === 1) return 1; + + let rowArr = new Array(n).fill(1); + + for (let row = 1; row < m; row++) { + for (let col = 1; col < n; col++) { + rowArr[col] += rowArr[col - 1]; + } + } + return rowArr[n - 1]; +}; + +// TC: O(m*n) +// SC: O(n)