尋找「水王」02

2022-08-17 03:42:19 字數 1574 閱讀 2441

1.設計思想

①存id到乙個陣列

②當某水王出現次數0次時:如果新出現的和別的水王id相同,別的水王出現次數+1;如果不是,那麼它是新水王,記錄並給它自己次數+1

③如果出現與某水王相同id,某水王id出現次數+1;如果出現全新id,全部水王id出現次數-1

2.**實現

//

2016-5-26 李娜

//尋找三個發帖數量超過了1/4的「水王」

#include

#include

#include

#define n 50

using

namespace

std;

intmain()

;//存id

ifstream infile(

"e:\\sw.txt");

if (!infile)

while (getline(infile,id))//

讀取每行的id

/////////////////////////////////////////////

//////

/以上:將檔案內容給a[i]

/////////////////////

////////

/以下:算水王

/////////////////////////////////

//////////////////////////////////////////

//int s=;//

分別給三個水王計數用

string sw=;//

存水王id

for(j=0;j)

else

if (a[j]==sw[2])//

如果又出現是第3個水王

else

//這是新水王

}else

if (s[1]==0)//

水王2出現0次,以下**同上含義

else

if (a[j]==sw[2

])

else

}else

if (s[2]==0)//

水王3出現0次,以下**同上含義

else

if (a[j]==sw[1

])

else

}else

//水王都有存資料了,有可能出現重複的資料,也有可能是新資料;所以重複了就次數+1,新的就次數都-1

else

if (sw[1]==a[i])

else

if (sw[2]==a[i])

else

s[0]--,s[1]--,s[2]--;}}

for (int k=0;k<3;k++)

}

3.測試截圖

4.個人總結

本來是用陣列,一組一組比,但是出現兩個結果:

一是全變成最後乙個id

二是全一樣的id

我發現那樣會覆蓋,所以不能那樣比

尋找發帖「水王」

分析與解法 首先想到的是乙個最直接的方法,我們可以對所有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 且只需要常熟...