- 題目描述: 給定一個整形數組,例如:21,23,25,15,15,23,98,5,21 去除重複項之後保留的數組爲25,98,5.
- java語言解法:
public class ArrayViewUtils { /** * @desc 刪除數組裏重複的數字,只保留不重複的數字。 * 時間複雜度分析爲O(n) * @param arr 數組 * @return arr[] */ public static int[] delRepeatFromArray(int[] arr) { if(null==arr){ return null; } int length = arr.length; if(length<1){ return null; } //統計重複出現數字的總個數 int repeatSum=0; HashMap<Integer, Integer> map = new HashMap<>(length,1.0F); for (int i = 0; i <length ; i++) { //存在重複則value大於1不存在重複 value 等於1 if(map.containsKey(Integer.valueOf(arr[i]))){ map.put(arr[i],map.get(arr[i])+1); if(map.get(arr[i])==2){ repeatSum=repeatSum+1; } repeatSum=repeatSum+1; }else{ map.put(arr[i],1); } } int[] resultArr=new int[length-repeatSum]; int m=0; for (int i = 0; i <length ; i++) { if(map.get(arr[i])==1){ resultArr[m]=arr[i]; m++; } } return resultArr; } public static void main(String[] args) { int[] arr1={1,22,58,1,69,55,11,11,58,2,3,5,2,99}; int[] resultArr1 = ArrayViewUtils.delRepeatFromArray(arr1); for (int i = 0,len=resultArr1.length; i <len ; i++) { System.out.println(resultArr1[i]+" ,"); } } }
- 利用hashMap 的特性,一次循環,key則是數組裏的數字,value記錄數組裏的數字出現的次數,大於1則重複出現。
- 再一次循環數組,把不重複的數字記錄到新的數組裏。
- 這裏可以分析到時間複雜度爲O(n),空間複雜度 新建裏數組和map,複雜度也爲O(n).
算法面試之一道去除數組裏重複數字的算法題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.