查找登录/注销数据数组中的间隙/空闲时间

时间:2018-02-16 17:40:17

标签: ios algorithm

我有一个JSON对象,其数组为" employee"表示每个员工的登录和注销时间的对象。我试图在Swift中编写一个函数来向我显示没有员工登录的时间(即空闲或间隙时间)。此外,这个商店有一个开放/关闭时间,所以我有人们可能登录的上限和下限。

我坚持从哪里开始,所以任何帮助将不胜感激。我已经浏览了许多众所周知的算法,但似乎找不到任何东西。非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

一般的想法非常简单。我假设您可以确定没有人登录的起始位置,并且您的输入数据按升序时间排序。

构建一个空字典,以登录名为键。然后开始阅读日志。登录后,将该登录名添加到字典中。当您注销时,将该登录名删除到字典中。每当您为空字典添加名称时,您就结束了空闲时段。每当删除名称导致字典为空时,就会启动一个空闲时段。

伪代码是:

names = empty dictionary

while not end of log
     if login-type is login
         if names contains login-name
             // error: already logged in
         if names.count == 0
             // end of an idle period
             idle-end = login-time
         names.add(login-name)
     else if login-type is logout
         if names does not contain login-name
             // error: logout without login
         names.remove(login-name)
         if names.count == 0
             // beginning of an idle period
             idle-start = login-time
end while

在每个打开期间结束时,您需要一些额外的逻辑来清空字典,并允许提前登录(在正式打开之前)。但是上面的基本思想应该会给你一个良好的开端。