阿里筆試_ //如果有人n分鐘內,連續發帖M次,將本人封殺掉

 //如果有人n分鐘內,連續發帖M次,將本人封殺掉
算法思想:Arrylist存儲點擊的記錄,HashMap(用戶,發帖時間,次數).HashSet(封殺掉的用戶)
1.將記錄讀取到list列表中,for遍歷,通過截取字符串,獲取i(i=0,1,2,3,4)的當前用戶的當前時間
2.計算當前用戶的當前的時間,從hashmap中讀取上一次的時間,
3.判斷hashmap上次的時間,時間記錄爲null,將當前的用戶,時間,點擊次數,存到hashmap中;如果上次的時間非null,存到hashmap中,判斷本次與上次的時間間隔,時間間隔《10分鐘,記錄次數》M,將本用戶存到hasset內
3.通過迭代器讀取hashset中的封殺用到,到數組中,輸出


package Personal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;


public class UserGag {


public static void main(String[] args) {
Scanner sca = new Scanner(System.in);//讀取輸入的記錄
int limitTime = sca.nextInt();
int limitLine = sca.nextInt();
int i = 0;
List<String> listLog = new ArrayList<String>();
while(i <= 6){
listLog.add(sca.nextLine());//讀取記錄信息存入到 數組列表中
i += 1;
}
String[] result = demo(limitTime, limitLine, listLog);//輸入設定的要求
for(String one : result)
System.out.print(one + " ");//輸出數組的內容
}

public static String[] demo(int limitTime,int limitLine,List<String> listLog){
Map<String, Integer> userSubinfo = new HashMap<String, Integer>();//存儲鍵-值, 用戶名,時間,次數
  Set<String> gapUser = new HashSet<String>();
for(int i = 1;i < listLog.size();i++){//正則表達式對第一條記錄 進行分割
String log = listLog.get(i);
String[] info = log.split("#|:| |\\-");
int day = Integer.valueOf(info[2]);
int hour = Integer.valueOf(info[3]);
int min = Integer.valueOf(info[4]);
int sec = Integer.valueOf(info[5]);
String user = info[6];

int currentSubSec = day * 24 * 3600 + hour * 3600 + min * 60 + sec;//獲取當前的時間

                        //獲取上一次的時間,如果上一次的時間記錄爲null,則記爲-1,否則獲取上一次的時間

int lastSubmSec = userSubinfo.get(user + "SubTime") == null ?
-1 : userSubinfo.get(user+"SubTime");
if(lastSubmSec == -1){//上一次的時間記錄爲空,當前用戶的記錄次數爲1
userSubinfo.put(user + "SubTime", currentSubSec);
userSubinfo.put(user + "SubNum", 1);
}
else{//否則 求取時間間隔,記錄次數
int diffTime = currentSubSec - lastSubmSec;
int SubTime = userSubinfo.get(user + "SubNum");
if(diffTime <= limitTime * 60){//與上一次的時間間隔 《10分鐘內
SubTime += 1;//記錄+1
if(SubTime > limitLine)
gapUser.add(user);
}
userSubinfo.put(user + "SubTime", currentSubSec);
userSubinfo.put(user + "SubNum", SubTime);
}
}
String[] result = new String[gapUser.size()];
Iterator<String> it = gapUser.iterator();
int j = 0;
while(it.hasNext()){
result[j] = it.next();
j += 1;
}
return result;
}


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章