java 一組數字的查重演算法

2021-07-24 12:39:39 字數 2768 閱讀 9283

今天程式設計遇到了乙個陣列查重假排序的問題,以為很簡單做起來還真有點費勁。特此參考網上和自己思考動手寫了幾個查重演算法,記錄下來以備檢視。

演算法一、

思想:本演算法利用了set介面的實現類不能新增重複元素的特性,同時treeset實現類中新增的元素是按照順序排列的特點解決了查重和排序兩個問題

/**

* 使用set介面中三個實現類無法存入相同的元素的特性,和tresset儲存順序為公升序儲存引用的特性 來實現排序

* @param sourarray 待排序的陣列

* @return 去重且排序後的陣列

*/public static int treesetsort(int sourarray);

return len;

} treesetmytreeset=new treeset();

for (int i = 0; i < sourarray.length; i++)

int desarray=new int[mytreeset.size()];

int count=0;

for(integer xinteger :mytreeset)

return desarray;

}

演算法二、

時間複雜度為n

/**

* 該方法根據集合類中的set介面,使用hashset的實現類之特性來完成,

* 即重複元素無法加入到該集合之中。程式的時間複雜度為n,空間複雜度為hashset占用的空間

* @param nums 待去重的陣列

* @return 返回去重之後的陣列

*/public static int hashsetreduce(int nums);

return len;

} setmyset=new hashset();

int pos=0;

for (int i = 0; i < nums.length; i++)

}int desarray=new int[pos];

for (int i = 0; i < desarray.length; i++)

return desarray;

}

演算法三、

方法返回的是乙個有序的陣列

/**

* 使用arrays類中的sort方法實現排序,然後用後面的值與前面的乙個比較,不相同則加入到新陣列之中

* 注意:該方法返回的是乙個有序的陣列

* @param sourarray 源待去重陣列

* @return 公升序的去重的陣列

*/public static int sorttoreduce(int sourarray);

return len;

} arrays.sort(sourarray);

int index=1;

for (int i = 1; i < sourarray.length; i++)

} int desarray=new int[index];

for (int i = 0; i < desarray.length; i++)

return desarray;

}

演算法四、

注意:break關鍵字中斷跳出了本層迴圈,即如果有多層巢狀迴圈那麼只跳出這一層迴圈,並不是跳出所有的迴圈。

/**

* 該方法使用插入排序的思想來處理

* 複雜度為n*n

* @param sourarray 源陣列

* @return 去重後陣列

*/public static int insertsort(int sourarray);

return len;

}int index=1;

for (int i = 1; i < sourarray.length; i++)

}if (index==j)

} int desarray=new int[index];

for (int i = 0; i < desarray.length; i++)

return desarray;

}

演算法五、

/**

* 新建乙個相同大小的陣列,然後依次從老陣列中拿出元素與新陣列中元素比對如果不相同則不處理,

* 如果相同則立刻break中斷該層的迴圈函式

* 時間複雜度為n*n

* @param sourarray 源陣列

* @return 保持原順序的去重過的新陣列

*/public static int doublereduce(int sourarray);

return len;

} int newarray=new int[sourarray.length];

newarray[0]=sourarray[0];

int index=1;

for (int i = 1; i < newarray.length; i++)

}if (j==index)

}int desarray=new int[index];

for (int i = 0; i < desarray.length; i++)

return desarray;

}

總結、通過練習與總結搞清楚了幾種查重演算法。

隨機輸出一組數字 洗牌演算法

要求高效。思路一 s時間上高效必然是空間上換來的,思路關鍵為 boolean nm new boolean 100 將出現過的數字在陣列中做下標記。時間複雜度為 o n 輸出結果圖 思路二 上述 中有乙個缺陷,最後乙個數生成時,會需要較大的時間去除之前的重複數字。根據洗牌演算法得到的思路為,先將陣列...

一組成對的數字,找出不成對的數字

題面描述 有乙個卡組,卡組中所有不同的卡牌都有兩張。不小心遺失了一張,找出遺失的是哪張卡牌。輸入資料 輸入資料的第一行為乙個整數 t 1 t 10 表示有 t 組測試資料。每組資料的第一行為乙個整數 n 2 n 100000 n 為偶數,表示乙個卡組中卡牌的數量。接下來的一行有 n 1 個整數,為剩...

Java 一組數能排幾行

如果現在給你出道題,有乙個30人的隊伍,希望你以每8人為一排排成行,能有多少行,你怎麼來寫這個表示式呢?早先我用的笨方法就是 public static void main string args system.out.println row row 結果 row 4 現在可以用這樣的方法寫 pub...