題目:
隨著論壇的發展,管理員發現水王沒有了,但是統計結果表明,有三個發帖很多的id。據統計他們的發帖數量超過了1/4,你能從發帖列表中快速找到他們嗎?
思路:關聯型容器可以很方便解決,php裡的array就是關聯型陣列,php有很多方便的排序函式,所以本次用php實現。
首先對id列表進行遍歷,以id為鍵值對陣列$result進行賦值,
如果$result[$id]沒有初始化,那麼這就是第一次出現,即$result[$id]=1
如果$result[$id]已經初始化,那個發帖數加1,即$result[$id]++
最後最$result陣列的值降序排序,取出前三個元素就是三個小水王。
先開始用的sort,未發覺鍵名都改了,然後看了一下手冊:
note: 此函式為array
中的元素賦與新的鍵名。這將刪除原有的鍵名,而不是僅僅將鍵名重新排序。
此處介紹一下php的排序函式:
sort() 函式用於對陣列單元從低到高進行排序。
rsort() 函式用於對陣列單元從高到低進行排序。
asort() 函式用於對陣列單元從低到高進行排序並保持索引關係。
arsort() 函式用於對陣列單元從高到低進行排序並保持索引關係。
ksort() 函式用於對陣列單元按照鍵名從低到高進行排序。
krsort() 函式用於對陣列單元按照鍵名從高到低進行排序。
1<?php
2$idlist = array(1,1,2,2,3,3,4); //
id 列表34
function validate($list)5
else
//再次出現 ,發帖數+1
1316}17
if(arsort($result)) //
對每個id按發帖數降序排列
1826}27
reset($result
);28
echo
key($result) . '
';29
next($result
);30
echo
key($result) . '
';31
next($result
);32
echo
key($result) . '
';33}34
35 validate($idlist
);36
37 ?>
第一次插入新鍵時時間複雜度是o(n)
查詢時時間複雜度是o(1)
排序用的是快排 o(nlogn)~(n^s) 1
時間上應該慢一些
課堂練習 找水王
一 題目及題目要求 二 設計思路 1 把帖子列表,抽象為乙個一維陣列arr num 輸入長度length為id總數,每個陣列元素為乙個id。2 再設定乙個迴圈,按照順序來依次兩兩比較,如果作者id相同則保留,如果作者id不同則消除。3 最後剩下id即為水王id 三 源程式 includeusing ...
課堂練習 找「水王」
一 題目要求 現有乙個灌水論壇,資訊學院的學生都喜歡在上面交流灌水。傳說在論壇上有乙個 水王 它不但喜歡發帖,還會回覆其他id發的每個帖子。坊間風聞該 水王 發帖數目已超過了帖子數目的一半。二 設計思路 本題要求時間複雜度是o n 我們可以設定乙個計數器flag,和乙個變數shuiwang存放當前的...
課堂練習 找水王
題目 設計思想 最簡單的思路就是 統計每乙個id出現的次數,然後找出出現最多的id就是水王。第二種更優的思路就是 利用水王發帖次數大於一半,然後兩兩一消,從第乙個數開始,如果等於它的下一位,number 1,如果不等於,number 1,不等於相當於把這兩個帖子都刪除,直接從這兩個的後乙個開始。最後...