我正在尝试编写一种算法,该算法将从作为参数传递的数组中删除所有重复的元素。我努力使它只能与数组作为参数,所以我添加了另一个参数,即数组大小。
我希望算法删除重复的元素,并返回包含非重复元素的数组。
这是我写的
Algorithm RemDup(arr[0..n-1],k)
j<--0
m<--0
for i<--0 to i<k do
for j<--i+1 to j<k do
if arr[i]=arr[j]then
for m=j to m<k do
arr[m] = arr[m+1]
endfor
k<-- k-1
j<-- j-1
endif
endfor
endfor
return arr
这是正确的方法吗?有没有一种方法可以使仅将数组作为参数传递来实现该算法?
答案 0 :(得分:0)
在JavaScript中,删除重复项的常用方法如下:
console.log(
[1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
.filter((v, i, arr) => arr.indexOf(v) === i)
);
在这里,您遍历数组以查找第一个匹配项。如果其位置与当前元素的位置不同,则它必须是重复的,您将忽略它。用伪代码:
Algorithm RemDup(arr[0..n-1],k)
i<--0
m<--0
while i<k do
skip<--false
for j<--0 to j<i do
if arr[i]=arr[j]then
skip<--true
break
endif
endfor
if skip do
for m=i to m<k do
arr[m] = arr[m+1]
endfor
k<--k-1
else
i<--i+1
endif
endfor
return arr
答案 1 :(得分:0)
如果要从函数参数中删除数组长度“ k”,则可以读取函数内部的数组长度并将其分配给“ k”。 您的算法对于未排序的数组看起来不错。如果是用于排序数组,则可以从算法中删除一个循环,如下所示。在下面的算法中,我使用了相同的输入数组来存储最终输出。因此,返回输出数组的最终索引值“ j”(删除重复项之后)。
请参考以下链接进行详细分析:https://www.geeksforgeeks.org/remove-duplicates-sorted-array/
Algorithm RemDup(arr[0..n-1])
k<--arr.length
j<--0
for i<--0 to i<k do
if arr[i]!=arr[i+1]then
arr[j] = arr[i]
j<--j+1
end if
endfor
//将最后一个元素存储为唯一的或重复的,以前没有存储过
arr[j] = arr[n-1];
return arr,j
希望它能帮助您解决问题。