diff --git a/problems/0027.移除元素.md b/problems/0027.移除元素.md index 78f9afb7..4afd347a 100644 --- a/problems/0027.移除元素.md +++ b/problems/0027.移除元素.md @@ -185,7 +185,7 @@ func removeElement(nums []int, val int) int { ``` JavaScript: -``` +```javascript //时间复杂度O(n) //空间复杂度O(1) var removeElement = (nums, val) => { diff --git a/problems/0202.快乐数.md b/problems/0202.快乐数.md index 710c824d..02db507a 100644 --- a/problems/0202.快乐数.md +++ b/problems/0202.快乐数.md @@ -159,26 +159,28 @@ func getSum(n int) int { javaScript: ```js -function getN(n) { - if (n == 1 || n == 0) return n; - let res = 0; - while (n) { - res += (n % 10) * (n % 10); - n = parseInt(n / 10); +var isHappy = function (n) { + let m = new Map() + + const getSum = (num) => { + let sum = 0 + while (n) { + sum += (n % 10) ** 2 + n = Math.floor(n / 10) + } + return sum + } + + while (true) { + // n出现过,证明已陷入无限循环 + if (m.has(n)) return false + if (n === 1) return true + m.set(n, 1) + n = getSum(n) } - return res; } -var isHappy = function(n) { - const sumSet = new Set(); - while (n != 1 && !sumSet.has(n)) { - sumSet.add(n); - n = getN(n); - } - return n == 1; -}; - -// 使用环形链表的思想 说明出现闭环 退出循环 +// 方法二:使用环形链表的思想 说明出现闭环 退出循环 var isHappy = function(n) { if (getN(n) == 1) return true; let a = getN(n), b = getN(getN(n)); diff --git a/problems/0718.最长重复子数组.md b/problems/0718.最长重复子数组.md index 9e3da663..712b5eeb 100644 --- a/problems/0718.最长重复子数组.md +++ b/problems/0718.最长重复子数组.md @@ -278,7 +278,26 @@ const findLength = (A, B) => { return res; }; ``` - +> 滚动数组 +```javascript +const findLength = (nums1, nums2) => { + let len1 = nums1.length, len2 = nums2.length; + // dp[i][j]: 以nums1[i-1]、nums2[j-1]为结尾的最长公共子数组的长度 + let dp = new Array(len2+1).fill(0); + let res = 0; + for (let i = 1; i <= len1; i++) { + for (let j = len2; j > 0; j--) { + if (nums1[i-1] === nums2[j-1]) { + dp[j] = dp[j-1] + 1; + } else { + dp[j] = 0; + } + res = Math.max(res, dp[j]); + } + } + return res; +} +``` ----------------------- diff --git a/problems/数组理论基础.md b/problems/数组理论基础.md index 6d7b9f9a..146cd2de 100644 --- a/problems/数组理论基础.md +++ b/problems/数组理论基础.md @@ -88,7 +88,7 @@ int main() { **所以可以看出在C++中二维数组在地址空间上是连续的**。 -像Java是没有指针的,同时也不对程序员暴漏其元素的地址,寻址操作完全交给虚拟机。 +像Java是没有指针的,同时也不对程序员暴露其元素的地址,寻址操作完全交给虚拟机。 所以看不到每个元素的地址情况,这里我以Java为例,也做一个实验。