問題的表述就是說有那麼一我的,他在一個論壇上發帖,而後每貼必回,本身也發帖。那麼這我的在發帖的數目上就超過了整個論壇的帖子數目的一半以上。算法
我對這個問題一開始的思路是,用SQL語句獲取整個列表中的數據,每次用sql讀取id出現次數List儲存這我的的id,接着讀取下一個id,若在list中存在則跳過。若發帖數大於數據/2則這我的是「水王」。sql
我在課上完成的代碼以下,其中list是我定義的獲取所有數據的一個sql函數:函數
ClassService service=new ClassService(); String []strList=new String[]{"no","id"}; @SuppressWarnings("unchecked") List<People> people= (List<People>) service.list("reply",strList,new People().getClass()); List<String> ids=new ArrayList<String>(); int num=people.size(); int count=0; for(int i=0;i<=num/2;i++) { String itId=people.get(i).getId(); if(ids.contains(itId)) continue; String []strList1=new String[]{"id","no"}; String []strList2=new String[]{itId}; @SuppressWarnings("unchecked") List<People> peopleTemp= (List<People>) service.search("reply",strList1,strList2,new People().getClass()); if(peopleTemp.size()>=people.size()/2) { System.out.println("水王是"+itId); System.out.println("他的發帖數是"+peopleTemp.size()); break; } ids.add(itId); }
要求二是對上述算法將複雜度下降到O(n),我在上課的期間並無想到好的思路,緣由在於:spa
要求1.不能定義變量,只要求一次循環便得出最後水王是誰。code
我嘗試利用list.add(list.remove())嵌套,惋惜最終實驗沒有成功,也許是過於愚昧,並不能想出對應的解決思路。blog
同窗的思路:定義兩個變量(我感受已經不符合題意了),而後在這個的基礎上進行一次循環得出水王的值。rem