从用伪代码编写的数组中删除重复元素的算法
Algorithm to remove duplicate elements from an array written in pseudocode
我正在尝试编写一种算法,该算法将从作为参数传入的数组中删除任何重复元素。我努力只使用数组作为参数,所以我添加了另一个参数,即数组大小。
我希望算法删除重复元素并returns具有非重复元素的数组。
这是我写的
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
这是正确的方法吗?有没有办法让这个算法只用数组作为参数传递?
在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
如果您想从函数参数中删除数组长度'k',您可以在函数内部读取数组长度并将其赋值给'k'。
您的算法看起来适合未排序的数组。如果它用于排序数组,您可以从算法中删除一个循环,如下所示。在下面的算法中,我使用相同的输入数组来存储最终输出。因此返回输出数组的最终索引值 'j'(删除重复项后)。
参考这个link进行详细分析: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
希望对你的问题有所帮助。
我正在尝试编写一种算法,该算法将从作为参数传入的数组中删除任何重复元素。我努力只使用数组作为参数,所以我添加了另一个参数,即数组大小。
我希望算法删除重复元素并returns具有非重复元素的数组。
这是我写的
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
这是正确的方法吗?有没有办法让这个算法只用数组作为参数传递?
在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
如果您想从函数参数中删除数组长度'k',您可以在函数内部读取数组长度并将其赋值给'k'。 您的算法看起来适合未排序的数组。如果它用于排序数组,您可以从算法中删除一个循环,如下所示。在下面的算法中,我使用相同的输入数组来存储最终输出。因此返回输出数组的最终索引值 'j'(删除重复项后)。
参考这个link进行详细分析: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
希望对你的问题有所帮助。