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

时间:2020-10-26 13:43:23

标签: arrays algorithm pseudocode

我正在尝试编写一种算法,该算法将从作为参数传递的数组中删除所有重复的元素。我努力使它只能与数组作为参数,所以我添加了另一个参数,即数组大小。

我希望算法删除重复的元素,并返回包含非重复元素的数组。

这是我写的

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

这是正确的方法吗?有没有一种方法可以使仅将数组作为参数传递来实现该算法?

2 个答案:

答案 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

希望它能帮助您解决问题。

相关问题