//如果有人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];
-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;
}
}
算法思想: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,否则获取上一次的时间
-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;
}
}