1. 程式人生 > >找出陣列中移除的數與重複的數

找出陣列中移除的數與重複的數

題目描述: 陣列arr為一亂序陣列,但排序後是[1,2,3,4,5,…,n-1,n]; 從其中隨機取出一個數,再隨機將其中的一個數重複,陣列大小還是為n,請設計一個O(n)的演算法,找出取出的數與移除的數。 例如: 輸入:6 4 5 1 5 3 輸出:2(移除的數),5(重複的數) 思路:

  • 如果先將陣列排序的話,可以很容易的找到了,可是排序演算法時間複雜度最低為O(nlogn),不符合題目的O(n)要求。

  • 可以利用陣列下標唯一的方法,將陣列值作為下標建立新陣列O(n),陣列值的出現次數作為新陣列的值。

  • 最後遍歷一次新陣列 ( O(n) )就可以得到答案了

function find
(arr){ var hash_arr=[]; var len=arr.length; for(var i=0;i<len;i++){//統計各個數字的出現次數 hash_arr[arr[i]-1] == undefined ? hash_arr[arr[i]-1]=1 : hash_arr[arr[i]-1]=hash_arr[arr[i]-1]+1; } var del_num,dup_num; for(var i=0;i<len;i++){ if(hash_arr[i]==undefined){//此值即為移除的數字 del_num=i+1; }
if(hash_arr[i]==2){//出現兩次,為重複的次數 dup_num=i+1; } } console.log(del_num,dup_num); }