軟體工程課堂練習找水王續

2022-04-12 07:49:18 字數 1375 閱讀 4839

題目:

隨著論壇的發展,管理員發現水王沒有了,但是統計結果表明,有三個發帖很多的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,不等於相當於把這兩個帖子都刪除,直接從這兩個的後乙個開始。最後...