一、基本思路
首先,假設一個一維數組arr[ ]={ 4, 3, 35, 3, 2, 4, 6, 3},其中有三個重復元素 3,4,3。要如何剔除呢,由于還沒有涉獵到一些經典的調用,所以我選擇了用新的數組newArr[ ]去繼承原來數組中的不重復的元素,另外還需要一個判斷數組Arr[ ],來判斷arr[ ]中哪幾個元素是重復的,才好去除掉。
二、步驟
1.設置判斷數組Arr[ ]
代碼如下(示例):
1
2
3
4
5
6
7
8
9
10
11
12
|
int [] arr = { 4 , 3 , 35 , 3 , 2 , 4 , 6 , 3 }; int [] Arr = new int [arr.length]; for ( int i = 0 ; i < arr.length- 1 ; i++) { for ( int j = i + 1 ; j < arr.length; j++) { if (arr[i] == arr[j]) { Arr[j] = 1 ; //把Arr中元素下標和arr中元素下標一致的元素,賦值為1,來標記判斷重復元素的位置(下標) } } }` // //測試一下相同元素的位置 for ( int i = 0 ; i < Arr.length; i++) { System.out.print(Arr[i]); |
初始化一個長度和arr相同的數組Arr={0,0,0,0,0,0,0,0},用兩層嵌套for循環來判斷各重復元素:外層循環控制比較輪數,內層循環控制不同的兩個元素之間的比較。(其實總體過程就是首先第一個元素和后面比較是否重復,然后第二輪是從第二個元素開始依次和右邊剩下的各個元素開始比較,第三輪…第n輪…
eg: i=0時,進入外層循環,第一輪比較:以arr[i]=arr[0]=4為基準開始比較,
進入內層循環,再進行比較:
(1)arr[j]=arr[i+1]=arr[1]=3,3!=4,不重復,
(2)arr[j+1]=arr[i+2]=arr[2]=35,35!=4,不重復,
(3)arr[j+2]=arr[i+3]=arr[3]=3, 3!=4,不重復 ,
(4)arr[j+3]=arr[i+4]=arr[4]=2, 2!=4,不重復 ,
(5)arr[j+4]=arr[i+5]=arr[5]=4, 4==4,重復 ,
…
此時找到了一個重復的元素4,然后同樣的
i=1時,以arr[i]=arr[1]=3為基準進入第二輪比較,可以找到重復元素arr[3]=3,arr[7]=3,都是重復元素
i=…時,一直重復arr.length(數組的長度)輪比較,最終找出重復元素只有三個,就是3,4,3。
注意到: // //測試一下相同元素的位置
for (int i = 0; i < Arr.length; i++) {
System.out.print(Arr[i]);
其實這一步不必要,但是為了直觀顯示出重復元素的位置,我輸出了判斷數組Arr,輸出結果是 0 0 0 1 0 1 0 1,很清晰的看出原數組arr中哪三個位置的元素重復了的
2.繼承數組newArr[ ]獲取不重復元素
就是剔除重復元素的步驟
1
2
3
4
5
6
7
8
|
System.out.println(); int count = 0 ; for ( int i = 0 ; i < Arr.length; i++) { if (Arr[i] == 0 ) { count++; } System.out.println( "不重復元素的個數有" + count + "個" ); int [] newArr = new int [count]; |
(1)遍歷判斷數組Arr[ ],遍歷到0元素的時候,計數器count+1,count數就是不重復元素個數,就是繼承數組newArr[ ]的長度。
(2) 設置計數器 index 初始化=0,for循環遍歷判斷數組Arr[ ],通過if條件語句。如果Arr[ ]=0,說明在該位置下的原數組元素是不重復的,則執行newArr[index++] = arr[i];(把原數組中不重復的元素繼承給newArr)
1
2
3
4
5
6
7
8
9
|
int index = 0 ; for ( int i = 0 ; i < Arr.length; i++) { if (Arr[i] == 0 ) { newArr[index++] = arr[i]; } } for ( int i = 0 ; i < newArr.length; i++) { System.out.print(newArr[i] + " " ); } |
(3)for循環遍歷繼承數組newArr[ ],輸出結果就是去除重復元素后的最終結果。
總結
關鍵詞 :
判斷數組Arr[ ]:判斷數組中重復元素的位置(下標)。
繼承數組newArr[ ]:繼承去掉重復元素后剩下不重復的數組元素。
(以上兩個數組都是我自己方便理解取的名字)
以上就是我要介紹的全部內容,由于水平有限難免會有紕漏,希望能幫助到大家,大佬們歡迎批評指正。
附上完整代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
public class Array { public static void main(String[] args) { int [] arr = { 4 , 3 , 35 , 3 , 2 , 4 , 6 , 3 }; int [] Arr = new int [arr.length]; //<arr.length-1防止數組越界 for ( int i = 0 ; i < arr.length- 1 ; i++) { for ( int j = i + 1 ; j < arr.length; j++) { if (arr[i] == arr[j]) { Arr[j] = 1 ; } } } // //測試一下相同元素的位置 for ( int i = 0 ; i < Arr.length; i++) { System.out.print(Arr[i] + " " ); } System.out.println(); int count = 0 ; for ( int i = 0 ; i < Arr.length; i++) { if (Arr[i] == 0 ) { count++; } } System.out.println( "不重復元素的個數" + count); int [] newArr = new int [count]; int index = 0 ; for ( int i = 0 ; i < Arr.length; i++) { if (Arr[i] == 0 ) { newArr[index++] = arr[i]; } } System.out.println( "去除掉重復元素后的數組:" ); for ( int i = 0 ; i < newArr.length; i++) { System.out.print(newArr[i] + " " ); } } } |
輸出結果:
以上就是java學習之一維數組中重復元素的去除的詳細內容,更多關于java一維數組的資料請關注服務器之家其它相關文章!
原文鏈接:https://blog.csdn.net/qq_51964402/article/details/115607489