算法面試之一道去除數組裏重複數字的算法題

  • 題目描述: 給定一個整形數組,例如: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).
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章