从Java中未排序的数组中删除重复项

时间:2018-08-31 03:44:11

标签: arrays

我在一次采访中被问到,我最近似乎从未排序的数组中删除了重复项,同时仍然保持了它们出现的顺序。

例如:

  • 输入:int[] nums = [2,1,3,3,2,1,4]
  • 输出应为int[] result = [2,1,3,4]

我尝试了两个选项,一个用于Hashset,另一个用于list。但是我仍然想知道是否有更好的优化解决方案。 谢谢你能帮帮我 NerdyHB

这是解决方法

public static void main(String[] args) {
    int[] nums = new int[] { 2, 1, 3, 2, 1 };
    List<Integer> result = removeDuplicates(nums);
    System.out.println(result);

    int[] res = removeDuplicatesUsingHashSet(nums);
    System.out.println(Arrays.toString(res));
}

public static List<Integer> removeDuplicates(int[] nums) {
    List<Integer> result = new ArrayList<>();
    for (int n : nums) {
        if (!result.contains(n)) {
            result.add(n);
        }

    }
    return result;
}


public static int[] removeDuplicatesUsingHashSet(int[] nums) {
    HashSet<Integer> hset = new HashSet<>();
    for (int n : nums) {
        hset.add(n);
    }
    int[] result = new int[hset.size()];
    int counter = 0;
    Iterator<Integer> itr = hset.iterator();
    while (itr.hasNext()) {
        result[counter++] = itr.next();
    }

    return result;
}

2 个答案:

答案 0 :(得分:0)

更改行:

HashSet<Integer> hset = new HashSet<>();

收件人:

LinkedHashSet<Integer> hset = new LinkedHashSet<>();

答案 1 :(得分:0)

import java.util.Arrays;
public class Main
{
public static void main (String[]args)
{
int[] arr = { 25, 14, 56, 15, 36, 36, 77, 18, 18, 49 };
int size=arr.length;
for(int i=0;i<size;i++)
{
  for(int j=i+1;j<size;j++)
  {
    if(arr[i]==arr[j])
    {
      arr[j]=arr[size-1];
      size--;
    }
 }
  }

 for(int a=0;a<size;a++)
  {
  System.out.print(arr[a]+" ");
  }

 }

}