diff --git a/08-coding-interview-prep/algorithms.json b/08-coding-interview-prep/algorithms.json index c09c273..ef97f11 100644 --- a/08-coding-interview-prep/algorithms.json +++ b/08-coding-interview-prep/algorithms.json @@ -11,7 +11,7 @@ "知识提要:对称差 (Symmetric Difference),数学上,两个集合的对称差分是只属于其中一个集合,而不属于另一个集合的元素组成的集合,例如:集合let A = [ 1, 2, 3]let B = [ 2, 3, 4]的对称差分为A △ B = C = [ 1, 4]。 集合论中的这个运算相当于布尔逻辑中的异或运算。", "创建一个函数 sym,输入两个或两个以上的数组作为参数,然后返回值为对称差分的数组", "思路:设定两个数组 (例如:let A = [1, 2, 3]let B = [2, 3, 4])作为参数传入,返回对称差分数组(A △ B = C = [1, 4]),且数组中没有重复项。", - "如果你遇到了困难,请点击帮助。你可以找人“结对编程”,但不要因此放弃思考。", + "如果你遇到了困难,请点击帮助。你可以找人“结对编程”,但不要因此放弃思考。" ], "solutions": [ "function sym() {\n var arrays = [].slice.call(arguments);\n return arrays.reduce(function (symDiff, arr) {\n return symDiff.concat(arr).filter(function (val, idx, theArr) {\n return theArr.indexOf(val) === idx \n && (symDiff.indexOf(val) === -1 || arr.indexOf(val) === -1);\n });\n });\n}\nsym([1, 2, 3], [5, 2, 1, 4]);\n" @@ -100,8 +100,8 @@ "id": "a56138aff60341a09ed6c480", "title": "Inventory Update", "description": [ - "创建一个二维数组,比较并更新存储在二维数组中的 ”库存“ 元素,然后并将其与新产生的第二个二维数组进行对比,更新当前的 ”库存“ 项的数量(arr1),如果找不到这个对比对象,那么将新的对象和数量添加到 “库存” 数组中。注意:返回的 “库存” 数组应该是按照数组元素的首字母顺序排序", - "如果你遇到了困难,请点击帮助。你可以找人“结对编程“,但不要因此放弃思考。", + "创建一个二维数组,比较并更新存储在二维数组中的“库存”元素,然后并将其与新产生的第二个二维数组进行对比,更新当前的 ”库存“ 项的数量(arr1),如果找不到这个对比对象,那么将新的对象和数量添加到“库存”数组中。注意:返回的“库存”数组应该是按照数组元素的首字母顺序排序", + "如果你遇到了困难,请点击帮助。你可以找人“结对编程“,但不要因此放弃思考。" ], "solutions": [ "function updateInventory(arr1, arr2) {\n arr2.forEach(function(item) {\n createOrUpdate(arr1, item);\n });\n // 所有的存货都必须记帐,否则你将被解雇!\n return arr1;\n}\n\nfunction createOrUpdate(arr1, item) {\n var index = -1;\n while (++index < arr1.length) {\n if (arr1[index][1] === item[1]) {\n arr1[index][0] += item[0];\n return;\n }\n if (arr1[index][1] > item[1]) {\n break;\n }\n }\n arr1.splice(index, 0, item);\n}\n\n// 示例库存列表 \nvar curInv = [\n [21,'Bowling Ball'],\n [2,'Dirty Sock'],\n [1,'Hair Pin'],\n [5,'Microphone']\n];\n\nvar newInv = [\n [2,'Hair Pin'],\n [3,'Half-Eaten Apple'],\n [67,'Bowling Ball'],\n [7,'Toothpaste']\n];\n\nupdateInventory(curInv, newInv);\n" @@ -173,9 +173,9 @@ "id": "a7bf700cd123b9a54eef01d5", "title": "No Repeats Please", "description": [ - "把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数。连续重复只以单个字符为准。", - "例如:aab应该返回 2, 因为它总共有 6 种排列方式: aabaababaababaabaa,但是其中只有 2 个没有连续重复的字符( 字符 a 是本例中的重复字符 ):abaaba", - "如果你遇到了困难,请点击 帮助 。你可以找人” 结对编程 “,但不要因此放弃思考。" + "把一个字符串中的所有的字符重新排列,然后生成一个新的字符串,返回的新字符串中没有连续重复的字符。连续重复是以单个字符为判断标准。", + "例如:aab应该返回 2, 因为它总共有 6 种排列方式: aabaababaababaabaa,但是其中只有 2 个没有连续重复的字符(字符 a 是本例中的重复字符):abaaba", + "如果你遇到了困难,请点击 帮助 。你可以找人“结对编程“,但不要因此放弃思考。" ], "solutions": [ "function permAlone(str) {\n return permutor(str).filter(function(perm) {\n return !perm.match(/(.)\\1/g);\n }).length;\n}\n\nfunction permutor(str) {\n // http://staff.roguecc.edu/JMiller/JavaScript/permute.html\n //permArr: 全局数组:包含排列的列表 \ n //usedChars: 全局实用数组,其中一个列表包含 \"currently-in-use\"字符 var permArr = [], usedChars = [];\n function permute(input) {\n // 将输入参数转换成一个字符串数组 (每个字符都有一个元素)\n var i, ch, chars = input.split(\"\");\n for (i = 0; i < chars.length; i++) {\n // 从字符数组中获取并删除索引为\"i\"的字符 \n ch = chars.splice(i, 1);\n // 将删除的字符增加的使用字符的末尾 \n usedChars.push(ch);\n // 当char数组中没有其他字符添加时,添加使用的chars列表来排列排列 \n if (chars.length === 0) permArr[permArr.length] = usedChars.join(\"\");\n // 从char数组发送字符(减去上面删除的字符)进行置换 \n permute(chars.join(\"\"));\n // 将删除的数组添加回char数组中的原位置 \n chars.splice(i, 0, ch);\n //删除使用过的字符数组末尾使用的最后一个字符 \n usedChars.pop();\n }\n }\n permute(str);\n return permArr;\n}\n\npermAlone('aab');\n" @@ -311,7 +311,7 @@ "这种方式通过多次迭代数组来完成操作,不管是平均还是最坏的情况,都是具有二次时间复杂度。尽管这个方式简单,但是在实际应用中,大多数情况下不切实际的:时间复杂度过高。", "说明:创建一个函数并命名为bubbleSort,输入参数是一个数组,且数组元素全部都是整数类型,然后按照从最小到最大的顺序返回整个数组。", "注意:
我们将在后台调用这些函数,测试数组在编辑器中也是被注释掉了的。尝试记录输入array来确认你的冒泡排序算法是否正确。", - "如果你遇到了困难,请点击 帮助 。你可以找人 “结对编程”,但不要因此放弃思考。", + "如果你遇到了困难,请点击 帮助 。你可以找人 “结对编程”,但不要因此放弃思考。" ], "tests": [ { @@ -366,8 +366,8 @@ "description": [ "现在我们开始实现选择排序。选择排序是通过选择列表中最小值来与列表中的第一个值进行对比交换,然后从第二位置开始逐一对比,选择剩下的列表中最小值与第二个元素交换位置。然后循环遍历列表并交换元素,直到列表最后一个元素,此时的列表就完成了排序。选择排序在所有的情况下都具有二次时间复杂度。", "说明:创建一个函数并命名为selectionSort,输入参数是一个数组,且数组元素全部都是整数类型,然后按照从最小到最大的顺序返回整个数组。", - "注意:
我们将在后台调用这些函数,测试数组在编辑器中也是被注释掉了的。尝试记录输入array来确认你的冒泡排序算法是否正确。" - "如果你遇到了困难,请点击 帮助。你可以找人 “结对编程”,但不要因此放弃思考。", + "注意:
我们将在后台调用这些函数,测试数组在编辑器中也是被注释掉了的。尝试记录输入array来确认你的冒泡排序算法是否正确。", + "如果你遇到了困难,请点击 帮助 。你可以找人 “结对编程”,但不要因此放弃思考。" ], "tests": [ { @@ -423,7 +423,7 @@ "现在我们开始研究插入排序。这个方法通过在列表的开头见一个排序的数组来实现整个排序,它以第一个元素开始排序数组,然后检查对比下一个元素,并将其向后交换到排序的书中,直到它处在排序的位置。循环迭代整个列表,将新产生的元素交换到排序部分,直到整个列表处于排序状态。该算法在平均和最坏的情况下具有二次时间复杂度。", "说明:创建一个函数并命名为insertionSort,输入参数是一个数组,且数组元素全部都是整数类型,然后按照从最小到最大的顺序返回整个数组。", "注意:
我们将在后台调用这些函数,测试数组在编辑器中也是被注释掉了的。尝试记录输入array来确认你的冒泡排序算法是否正确。", - "如果你遇到了困难,请点击 帮助 。你可以找人 “结对编程”,但不要因此放弃思考。", + "如果你遇到了困难,请点击 帮助 。你可以找人 “结对编程”,但不要因此放弃思考。" ], "tests": [ { @@ -480,7 +480,7 @@ "快速排序是一种非常有效的排序方式,平均时间复杂度O(nlog(n)),同时它也是相对比较容易实现的方式。这些特性使得快速排序成为了一种流行而有用的排序方式。", "说明:创建一个函数并命名为quickSort,输入参数是一个数组,且数组元素全部都是整数类型,然后按照从最小到最大的顺序返回整个数组。虽然选择一个枢轴值很重要,但任何一个枢轴都能满足要求,为了以防万一,我嘛一般选择第一个或者最后一个元素来作为数轴值。", "注意:
我们将在后台调用这些函数,测试数组在编辑器中也是被注释掉了的。尝试记录输入array来确认你的冒泡排序算法是否正确。", - "如果你遇到了困难,请点击 帮助 。你可以找人 “结对编程”,但不要因此放弃思考。", + "如果你遇到了困难,请点击 帮助 。你可以找人 “结对编程”,但不要因此放弃思考。" ], "tests": [ { @@ -541,7 +541,7 @@ "另外,这将是我们在此章节讨论的最后一种排序算法,但是在后续有关树型数据结构的章节中,我们将一起研究堆排序,同样它也是一种高效的排序方式,其实现过程需要用到二进制堆的概念。", "Instructions:创建一个函数并命名为mergeSort,输入参数是一个数组,且数组元素全部都是整数类型,然后按照从最小到最大的顺序返回整个数组>。实现这个排序方式可以采用两个函数来实现:merge负责合并两个排序的数组,merge sort负责生成单个数组的用于归并使用。祝你好用!", "注意:
我们将在后台调用这些函数,测试数组在编辑器中也是被注释掉了的。尝试记录输入array来确认你的冒泡排序算法是否正确。", - "如果你遇到了困难,请点击 帮助 。你可以找人 “结对编程”,但不要因此放弃思考。", + "如果你遇到了困难,请点击 帮助 。你可以找人 “结对编程”,但不要因此放弃思考。" ], "tests": [ { diff --git a/08-coding-interview-prep/algorithms.md b/08-coding-interview-prep/algorithms.md index 3c7930c..f8b792a 100644 --- a/08-coding-interview-prep/algorithms.md +++ b/08-coding-interview-prep/algorithms.md @@ -1,5 +1,5 @@ -# Introduction to the Coding Interview Algorithms # +# 算法面试简介 # -This introduction is a stub +简介存根 -Help us make it real on [GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions). +帮助我们在[GitHub](https://github.com/freeCodeCamp/learn/tree/master/src/introductions)完成这一项目。 \ No newline at end of file diff --git a/README.md b/README.md index 367cffa..f917f55 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ challenges 指的不仅是课程本身,也是每个开源项目贡献者会遇 3、快速提高你的 Git 操作熟练度 -4、收获 GitHub 认可的 contributions +4、掌握一门前所未有的新技能:翻译 5、获得 freeCodeCamp 中文社区的认可 -感兴趣的小伙伴可以传送到 [Wiki](https://github.com/FreeCodeCampChina/challenges/wiki) 解锁翻译指南。 +感兴趣的小伙伴可以传送到 [Wiki](https://freecodecamp.coding.net/p/challenges/wiki) 解锁翻译指南。