阿里笔试_ //如果有人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;
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值