它可以這樣做:
首先,存儲所有用戶ID和二維數組初始登錄頻率,例如:
String [][] user = {{"john","0"}, {"bill","0"}, {"steve","0"},....};
//Of course you didn't do this hardcoded. You may do this using loop
然後做這樣的事情:
BufferedReader fr;
String usrid="";
int frequency=0;
for(int i=1;i<8;i++){
try{
fr = new BufferedReader(new FileReader("filepath/weekday"+i+".log"));
String dataRow = fr.readLine();
while (dataRow != null){
usrid = ..... ;//retrieve the userId from the dataRow
for(int j=0;j<user.length; j++){
frequency=Integer.parseInt(user[j][1]);
if(usrid.equalsIgnoreCase(user[j][0])){
user[j][1]=String.valueOf(frequency+1);
}
}
dataRow = fr.readLine();
}
}
catch(Exception e){}
}
最後,打印一週內登錄兩次的用戶:
for(int k=0;k<user.length;k++){
if(user[k][1].equals("2")){
System.out.println(user[k][0]);
}
嗯,這不是算法,我想。由於您實際上必須經歷所有數據,因此只要您經歷過所有這一切,就可以順序瀏覽它。我想他們只是想看看你是否知道Java足以實現它,但他們真的對算法複雜性不感興趣。 – ccjmne
這不是算法問題。正如我幾乎無法用文字描述的那樣,讓我用'SQL'來解釋它是否合適? 'select id,count(1)times from table where login_date>(current_time- [one-week-time])group by id having times = 2' – Rugal
我想知道解決此問題的最佳(最快)方法問題也是如此。如果有人有時間,當然。 –