天天看點

計數排序——有一個數組,裡面是從1到1,000,000的整數,其中有一個數字出現了兩次,你怎麼找出那個重複的數字?

在高手那裡學到一招~很巧妙~

計數排序

建立一個int c [1 000 000]的數組,初始值當然都是0

由于隻有一個數字出現了兩次,将這個數值做為新數組的下标(c[old[i]],将新數組的數值++,如果新數組的數值==2,很好,得到了這個數olds[i]。

原來的數組 int olds[]

新數組      int  new[] = new int [1 000 000]

for(int old : olds){

  new[old] ++;

  if(new[old]==2)

    return old;

}

缺點:如果olds數組内的數值範圍太大,new數組需要更多的空間

該算在原數組内數值範圍較小時效率不錯!