2016-09-19 85 views
1

我对Java很新,我很难尝试从旧数组中添加独特的值到我的新数组,技术上我必须返回一个新的数组而不使用独特的元素集。返回唯一元素数组

public static void main(String[] args) { 
    double[] list = {1,2,1}; 
    double [] Arr = new double[list.length]; 
    for(int i = 0; i < list.length; i++) { 
     for(int x = 0; x < list.length; x++) { 
      if(list[i] != list[x]){ 

      } 
     } 
    } 
} 

问题:你如何将它们添加到你的新阵列?现在

int index = 1; 
    int unique = 0; 
    newArray[0] = list[0]; 
    while(index < list.length) { 
     if(list[index] != list[index - 1]){ 
      unique = unique + 1; 
      newArray[unique] = list[index]; 
     } 
     index++; 
    } 
    return newArray; 
} 

作品:

我把它改成。

回答

1

我没有执行这一点,但下面的代码应该删除重复后,给你的,它需要如何做

public static void main(String[] args) { 
    double[] list = {1,2,1}; 
    double [] Arr = new double[list.length]; 
    int uniqueIndex = 0; 
    for(int i = 0; i < list.length; i++) { 
     boolean present = false; 
     for(int x = 0; x < uniqueIndex; x++) { 
      if(list[i] == Arr[x]){ 
       present = true; 
       break; 
      } 
     } 
     if(!present) 
      Arr[uniqueIndex++] = list[i]; 
    } 
} 

新的阵列将有默认值0末公平的想法,你可能想修剪它,可能会创建一个新的System.arraycopy

0

另一种方法。新手应自己编写代码。

1)对你的数组/列表进行排序。

2)遍历数组/列表直到长度为1,如果列表[i]!= list [i + 1],则将列表[i]推送到新列表。 3)如果列表[长度-1]!=列表[长度],则推送列表[长度]到新列表。

复杂度:O(nlgn)+ O(n)的

+0

如果数组中的最大值和最小值有限制并且所有值都是整数,那么可以用O(n)时间复杂度来解决它。 – shiva

1

只是因为我不能帮助自己,这里是使用Java 8特性的另一种选择。它比其他人简洁得多,但可能不是你的老师所追求的。

public static void main(String[] args) { 
    double[] list = {1, 2, 1}; 

    double[] arr = Arrays.stream(list).distinct().toArray(); 

    System.out.println(Arrays.toString(arr)); 
} 
+0

这是正确的答案。 –

+0

谢谢!但这不是老师想要的。再次感谢! – Hello