8.給定陣列a,大小為n,數字元素為1~n的int數,但是有些數字出現多次,有些數字沒出現,統計出哪些數字出現了多次,哪些數字沒有出現,要求額外空間使用o(1),時間o(n)
答:空間複雜度為o(1),故不能用額外的空間,即在陣列本身上操作。時間為o(n),故不能用先排序後比較相鄰元素的方法,時間為o(nlogn)。
先採用元素交換法,使陣列下標=陣列中元素值 - 1,如果元素a[i]存在多個,則在其他位置還存在a[j]=a[i],i<>j,將正確的位置下的值置為-1。然後遍歷陣列統計次數。如有a[j]=a[i],i<>j的情況,則將滿足a[a[i]-1]=a[i]的值減1,然後令a[j]=0。如果陣列中元素重複出現多次,則陣列的值<-1;如果只出現一次,則值等於-1;如果一次都沒出現,則值為0。再掃瞄一遍陣列,可以得到元素出現次數。
void swap(int *a, int len)
/* if(i == (j-1) || a[j-1] = j )
continue;
a[i] = a[j-1];
a[j-1] = j;
i--;
*/ }}
void count(int *a,int len)
else
}for(i = 0; i< len; i++)
else if(a[i] == -1)
else
} }
可參考 輔助理解!
統計數字出現次數
description 某次科研調查時得到了n個自然數,每個數均不超過1500000000 1.5 10 9 已知不相同的數不超過10000個,現在需要統計這些自然數各自出現的次數,並按照自然數從小到大的順序輸出統計結果。input 包含多個測試資料,每個包含n 1行 第1行是整數n,表示自然數的個...
統計陣列中各元素出現次數
給定一大小為n的整數陣列,其元素取值範圍為 1,n 請統計各元素出現的次數,並要求時間複雜度為o n 空間複雜度為o 1 若沒有空間的限制,則可直接開闢乙個大小等於元素最大值的陣列對各元素進行統計,並且順帶還進行了時間複雜度為o n 的排序 比快速排序還快哦 統計n個元素出現的次數,每個元素對應乙個...
統計陣列中每個數字出現的次數 陣列中重複出現的數字
今天給大家帶來的是一道劍指offer上的題目,也是一道很經典的題目,經常在面試 現,下面我們來看一下題目描述吧 題目說明 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複...