Java算法集合问题

GerusLong 2018-11-06 10:46:57
输入第一行包括一个整数N,代表记录的行数
以下N行每行包括一个字符串S和一个时间T,其中S代表账号ID(长度不超过10),T代表发生登录错误时间,格式是hh:mm:ss。1≦N≦100000,00:00:00≦T≦23:59:59.。对在1小时内登录次数超过6次进行ID输出,大神求解思路
...全文
57 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ITjavaman 2018-11-08
  • 打赏
  • 举报
回复
8
1 12:13:12
1 12:14:12
1 12:15:12
1 12:16:12
1 12:17:12
2 12:18:12
2 12:19:12
ITjavaman 2018-11-08
  • 打赏
  • 举报
回复
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = null;
str= sc.nextLine();
int n =Integer.parseInt(str);
String[] ss = null;

Map<String, String> mapTime = new HashMap<String, String>();
Map<String, Integer> mapCount = new HashMap<String, Integer>();

Set<String> result = new HashSet<String>();
String time = null;
for (int i = 0; i < n; i++) {
str = sc.nextLine();
ss = str.split(" ");
if (null == mapTime.get(ss[0])) {
mapTime.put(ss[0], ss[1]);
mapCount.put(ss[0],1);
} else {
time = mapTime.get(ss[0]);
if(isSameHour(time,ss[1])) {
//如果是同一個小時內的,mapcount+1
mapCount.put(ss[0],mapCount.get(ss[0])+1);
if(mapCount.get(ss[0])==6) {
result.add(ss[0]);
}
}else {
//重置
mapTime.put(ss[0], ss[1]);
mapCount.put(ss[0],1);
}
}
}

System.out.println(result.toString());
}

public static boolean isSameHour(String aTime,String bTime) {
String[] ssATime = aTime.split(":");
String[] ssBTime = bTime.split(":");

int atimeint = Integer.parseInt(ssATime[0])*60*60+Integer.parseInt(ssATime[1])*60+Integer.parseInt(ssATime[1]);

int btimeint = Integer.parseInt(ssBTime[0])*60*60+Integer.parseInt(ssBTime[1])*60+Integer.parseInt(ssBTime[1]);

if(btimeint - atimeint > 3600) {
return false;
}else {
return true;
}
}
GerusLong 2018-11-07
  • 打赏
  • 举报
回复
我这个时间和空间复杂度还是有点问题,求解大佬的算法
ITjavaman 2018-11-07
  • 打赏
  • 举报
回复
引用 2 楼 s__s9669 的回复:
[quote=引用 1 楼 ITjavaman的回复:]记录该ID第一次出现登录错误的时间(比如用map记录,变量mapTime),然后将该id登录错误次数记为1(比如用map记录,变量mapCount),
接下来如果还接收到该ID的记录,则判断时间与第一次出现的时间是不是同一个小时,
如果是,登录错误次数(mapCount)加1,
否的话,登录次数记为(mapCount)1,更新该id在mapTime的值
当次数超过6的进行输出,以此类推,大概思路

T是怎么进行判断的呢,用什么库吗[/quote]
大佬,这个就算是用字符串自己判断也能判断出来吧- -
GerusLong 2018-11-07
  • 打赏
  • 举报
回复
引用 1 楼 ITjavaman的回复:
记录该ID第一次出现登录错误的时间(比如用map记录,变量mapTime),然后将该id登录错误次数记为1(比如用map记录,变量mapCount),
接下来如果还接收到该ID的记录,则判断时间与第一次出现的时间是不是同一个小时,
如果是,登录错误次数(mapCount)加1,
否的话,登录次数记为(mapCount)1,更新该id在mapTime的值
当次数超过6的进行输出,以此类推,大概思路
T是怎么进行判断的呢,用什么库吗
ITjavaman 2018-11-07
  • 打赏
  • 举报
回复
记录该ID第一次出现登录错误的时间(比如用map记录,变量mapTime),然后将该id登录错误次数记为1(比如用map记录,变量mapCount),
接下来如果还接收到该ID的记录,则判断时间与第一次出现的时间是不是同一个小时,
如果是,登录错误次数(mapCount)加1,
否的话,登录次数记为(mapCount)1,更新该id在mapTime的值
当次数超过6的进行输出,以此类推,大概思路

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧