問題描述:我這裡有很多學生的學號(有重複的),已知其中有k個學生,他們的學號出現的次數都超過了總數的1/(k+1),請把這k個學號找出來。
上**:
#include#include#includeusing namespace std;templateinline size_t getarrlen(t (&arr)[n])
const int k=3;
int main();
int len=getarrlen(ids);
list> words;
for(int i=0;i>::iterator pos=words.begin();
while(pos!=words.end())
if(pos!=words.end())else
else
itr=words.begin();
while(itr!=words.end())else}}
} }list>::iterator itr=words.begin();
while(itr!=words.end())
cout
}
尋找發帖「水王」
分析與解法 首先想到的是乙個最直接的方法,我們可以對所有id進行排序。然後再掃瞄一遍排好序的id列表,統計各個id出現的次數。如果某個id出現的次數超過總數的一半,那麼就輸出這個id。這個演算法的時間複雜度為o n log2 n n 如果id列表已經是有序的,還需要掃瞄一遍整個列表來統計各個id出現...
尋找發帖水王
首先想到的是乙個最直接的方法,我們可以對所有id進行排序。然後再掃瞄一遍排好序的id列表,統計各個id出現的次數。如果某個id出現的次數超過總數的一半,那麼就輸出這個id。這個演算法的時間複雜度為o n log2 n n 如果id列表已經是有序的,還需要掃瞄一遍整個列表來統計各個id出現的次數嗎?如...
尋找發帖「水王」
題目 解法1 對所有id排序,因為該id出現的次數超過總數的一半,對有序的序列,第n 2項即為所求id。解法2 每次刪除兩個不同的id,那麼剩下的id列表中,水王 的id次數仍然超過總數的一半。可以通過不斷重複這個過程,把id列表中的id總數降低,從而得到答案。總的時間複雜度只有o n 且只需要常熟...