JavaScript 中从排序的字面量数组中删除重复项
问题陈述指出,给定一个由用户作为输入源提供的排序数字数组,我们需要从中删除重复或重复的元素,使其成为一个包含唯一元素的新数组。
什么是 JavaScript 中的排序数组?
排序数组是 JavaScript 中的一种数组,它遵循一定的顺序,其中每个元素在使用 JavaScript 本身中的 sort 方法之前都按字母和数字顺序排序。预先排序的数组可以让你更容易更高效地加快搜索并在排序数组上执行其他操作。
问题陈述的输出是删除数字数组中存在的重复和冗余元素,可以可视化如下
const sortedArray = [ 1 , 2 , 2 , 3 , 4 , 6 ,6 ]; // perform algorithm to remove duplicates const duplicateElementRemovedArray = [ 1 , 2 , 3 , 4 , 6 ];
算法
步骤 1:声明一个名为 removeDuplicates 的函数,该函数接受一个排序数组作为输入源,如问题陈述中所述。
步骤 2:使用外部 for 循环遍历数组的每个元素,从第 0 个索引到数组的长度。
步骤 3:使用内部循环,我们从排序数组的长度(即最后一个元素)向后遍历,直到外部循环 i 值加 1。
步骤 4:现在使用比较运算符检查和比较外部循环中 i 的值与每次迭代中 j 循环的每个值,以检查是否存在任何重复项。
步骤 5:如果发现任何重复项,则使用 splice 方法删除在 i 或 j 索引处的一个特定元素,一旦相等匹配成功,则丢弃并删除重复元素,其中 splice 方法中的第二个参数告诉删除多少个字符。
步骤 6:一旦使用嵌套循环完成所有重复项的检查和删除,则成功返回唯一的元素排序数组。
示例
function removeDuplicates(sortedArray) { for(let i = 0 ; i < sortedArray.length ; i++) { for( j = sortedArray.length ; j>=i+1 ; j--) { if(sortedArray[i] === sortedArray[j]) { sortedArray.splice(i,1); } } } return sortedArray; } const sortedArray = [ 1,1,2,3,4,4,5,6,6,7,8]; const uniqueElementsArray = removeDuplicates(sortedArray); console.log(uniqueElementsArray);
输出
[ 1, 2, 3, 4, 5, 6, 7, 8 ]
时间和空间复杂度
在上述算法中,我们最初使用了嵌套循环,它需要 array.length 遍历,因此导致 O(n^2) 的时间复杂度,JavaScript 的 splice 方法也需要 O(n) 的时间复杂度来提取或删除某个元素,因此导致 O(n^2) + O(n) = O(n^2) 最坏情况下的时间复杂度。
但空间复杂度为 O(1),即常数,因为我们没有分配任何额外的内存来完成从排序数字数组中删除重复项的任务。稍后我们还可以使用调用该函数,并在控制台中输出结果,结果将是
结论
这就是我们如何通过逻辑思维和编码上下文来解决上述问题陈述,从用于遍历和访问数组元素的嵌套循环和 splice JavaScript 方法开始,以完成问题陈述的执行。