从用伪代码编写的数组中删除重复元素的算法

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

希望对你的问题有所帮助。