寻找小水王
?
尋找發帖“水王”問題的擴展:“超級水王”沒有了。統計結果表明,有3個發帖很多的ID,他們的發帖數目都超過了帖子總數目N的1/4。你能從發帖ID列表中快速找出他們的ID嗎?
?
(一)分析問題:
如果每次刪除四個不同的ID(不管是否包含發帖數目超過總數1/4的ID),那么,在剩下的ID列表中,原先發帖比例大于1/4的ID所占比例仍然大于1/4,可以通過不斷重復這個過程,把ID列表中的ID總數降低(轉化為更小的問題),從而得到問題的答案
(二)代碼實現:
package 找小水王;public class Xiaoshuiwang {static void Find(int ID[],int N,int candidate[]){int nTimes[]={0,0,0};for(int i=0;i<N;i++){if(ID[i]==candidate[0]){nTimes[0]++;}else if(ID[i]==candidate[1]){nTimes[1]++;}else if(ID[i]==candidate[1]){nTimes[2]++;}else if(nTimes[0]==0){nTimes[0]=1;candidate[0]=ID[i];}else if(nTimes[1]==0){nTimes[1]=1;candidate[1]=ID[i];}else if(nTimes[2]==0){nTimes[2]=1;candidate[2]=ID[i];}else{nTimes[0]--;nTimes[1]--;nTimes[2]--;}}System.out.println("三個符合條件的ID分別是");for(int i=0;i<3;i++){System.out.println(candidate[i]+" ");}}public static void main(String args[]){int ID[]={1,1,1,2,2,2,3,3,3,1,2,3,1,2,3,6};int N=16;int candidate[] = {-1,-1,-1};System.out.println("打印ID列表");for(int i=0;i<N;i++){System.out.println(ID[i]);}Find(ID,N,candidate);} }(三)實驗截圖:
轉載于:https://www.cnblogs.com/hehejeson/articles/5530299.html
總結