2016-09-19 128 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