一維陣列中重復元素的去除
- 前言
- 一、基本思路
- 二、步驟
- 1.設定判斷陣列Arr[ ]:
- 2.繼承陣列newArr[ ]獲取不重復元素
- 總結
前言
關于一維陣列中有重復的元素該怎么剔除,作為java初學者的我整理出不呼叫任何特殊庫的基礎方法,這種思想在其他語言也適用,
一、基本思路
首先,假設一個一維陣列arr[ ]={ 4, 3, 35, 3, 2, 4, 6, 3},其中有三個重復元素 3,4,3,要如何剔除呢,由于還沒有涉獵到一些經典的呼叫,所以我選擇了用新的陣列newArr[ ]去繼承原來陣列中的不重復的元素,另外還需要一個判斷陣列,來判斷arr[ ]中哪幾個元素是重復的,才好去除掉,
.
二、步驟
1.設定判斷陣列Arr[ ]:
代碼如下(示例):
int[] arr = { 4, 3, 35, 3, 2, 4, 6, 3 };
int[] Arr = new int[arr.length];
for (int i = 0; i < arr.length; 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[ ]獲取不重復元素
就是剔除重復元素的步驟
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)
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[ ]:繼承去掉重復元素后剩下不重復的陣列元素,
(以上兩個陣列都是我自己方便理解取的名字)
以上就是我要介紹的全部內容,由于水平有限難免會有紕漏,希望能幫助到大家,大佬們歡迎批評指正,
附上完整代碼:
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];
for (int i = 0; i < arr.length; 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] + " ");
}
}
}
輸出結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/275143.html
標籤:java
下一篇:(原始碼級)一篇文章帶你深入了解Java字串(String、StringBuilder、StringBuffer的底層實作原理)
