mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-09 09:21:40 +08:00
100 lines
4.8 KiB
HTML
100 lines
4.8 KiB
HTML
<p>给你一个整数 <code>numberOfUsers</code> 表示用户总数,另有一个大小为 <code>n x 3</code> 的数组 <code>events</code> 。</p>
|
||
|
||
<p>每个 <code inline="">events[i]</code> 都属于下述两种类型之一:</p>
|
||
|
||
<ol>
|
||
<li><strong>消息事件(Message Event):</strong><code>["MESSAGE", "timestamp<sub>i</sub>", "mentions_string<sub>i</sub>"]</code>
|
||
|
||
<ul>
|
||
<li>事件表示在 <code>timestamp<sub>i</sub></code> 时,一组用户被消息提及。</li>
|
||
<li><code>mentions_string<sub>i</sub></code> 字符串包含下述标识符之一:
|
||
<ul>
|
||
<li><code>id<number></code>:其中 <code><number></code> 是一个区间 <code>[0,numberOfUsers - 1]</code> 内的整数。可以用单个空格分隔 <strong>多个</strong> id ,并且 id 可能重复。此外,这种形式可以提及离线用户。</li>
|
||
<li><code>ALL</code>:提及 <strong>所有</strong> 用户。</li>
|
||
<li><code>HERE</code>:提及所有 <strong>在线</strong> 用户。</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><strong>离线事件(Offline Event):</strong><code>["OFFLINE", "timestamp<sub>i</sub>", "id<sub>i</sub>"]</code>
|
||
<ul>
|
||
<li>事件表示用户 <code>id<sub>i</sub></code> 在 <code>timestamp<sub>i</sub></code> 时变为离线状态 <strong>60 个单位时间</strong>。用户会在 <code>timestamp<sub>i</sub> + 60</code> 时自动再次上线。</li>
|
||
</ul>
|
||
</li>
|
||
</ol>
|
||
|
||
<p>返回数组 <code>mentions</code> ,其中 <code>mentions[i]</code> 表示 id 为 <code>i</code> 的用户在所有 <code>MESSAGE</code> 事件中被提及的次数。</p>
|
||
|
||
<p>最初所有用户都处于在线状态,并且如果某个用户离线或者重新上线,其对应的状态变更将会在所有相同时间发生的消息事件之前进行处理和同步。</p>
|
||
|
||
<p><strong>注意 </strong>在单条消息中,同一个用户可能会被提及多次。每次提及都需要被 <strong>分别</strong> 统计。</p>
|
||
|
||
<p> </p>
|
||
|
||
<p><b>示例 1:</b></p>
|
||
|
||
<div class="example-block">
|
||
<p><span class="example-io"><b>输入:</b>numberOfUsers = 2, events = [["MESSAGE","10","id1 id0"],["OFFLINE","11","0"],["MESSAGE","71","HERE"]]</span></p>
|
||
|
||
<p><span class="example-io"><b>输出:</b>[2,2]</span></p>
|
||
|
||
<p><b>解释:</b></p>
|
||
|
||
<p>最初,所有用户都在线。</p>
|
||
|
||
<p>时间戳 10 ,<code>id1</code> 和 <code>id0</code> 被提及,<code>mentions = [1,1]</code></p>
|
||
|
||
<p>时间戳 11 ,<code>id0</code> <strong>离线</strong> 。</p>
|
||
|
||
<p>时间戳 71 ,<code>id0</code> 再次 <strong>上线</strong> 并且 <code>"HERE"</code> 被提及,<code>mentions = [2,2]</code></p>
|
||
</div>
|
||
|
||
<p><b>示例 2:</b></p>
|
||
|
||
<div class="example-block">
|
||
<p><span class="example-io"><b>输入:</b>numberOfUsers = 2, events = [["MESSAGE","10","id1 id0"],["OFFLINE","11","0"],["MESSAGE","12","ALL"]]</span></p>
|
||
|
||
<p><span class="example-io"><b>输出:</b>[2,2]</span></p>
|
||
|
||
<p><b>解释:</b></p>
|
||
|
||
<p>最初,所有用户都在线。</p>
|
||
|
||
<p>时间戳 10 ,<code>id1</code> 和 <code>id0</code> 被提及,<code>mentions = [1,1]</code></p>
|
||
|
||
<p>时间戳 11 ,<code>id0</code> <strong>离线</strong> 。</p>
|
||
|
||
<p>时间戳 12 ,<code>"ALL"</code> 被提及。这种方式将会包括所有离线用户,所以 <code>id0</code> 和 <code>id1</code> 都被提及,<code>mentions = [2,2]</code></p>
|
||
</div>
|
||
|
||
<p><b>示例 3:</b></p>
|
||
|
||
<div class="example-block">
|
||
<p><span class="example-io"><b>输入:</b>numberOfUsers = 2, events = [["OFFLINE","10","0"],["MESSAGE","12","HERE"]]</span></p>
|
||
|
||
<p><span class="example-io"><b>输出:</b>[0,1]</span></p>
|
||
|
||
<p><b>解释:</b></p>
|
||
|
||
<p>最初,所有用户都在线。</p>
|
||
|
||
<p>时间戳 10 ,<code>id0</code> <strong>离线</strong> <b>。</b></p>
|
||
|
||
<p>时间戳 12 ,<code>"HERE"</code> 被提及。由于 <code>id0</code> 仍处于离线状态,其将不会被提及,<code>mentions = [0,1]</code></p>
|
||
</div>
|
||
|
||
<p> </p>
|
||
|
||
<p><b>提示:</b></p>
|
||
|
||
<ul>
|
||
<li><code>1 <= numberOfUsers <= 100</code></li>
|
||
<li><code>1 <= events.length <= 100</code></li>
|
||
<li><code>events[i].length == 3</code></li>
|
||
<li><code>events[i][0]</code> 的值为 <code>MESSAGE</code> 或 <code>OFFLINE</code> 。</li>
|
||
<li><code>1 <= int(events[i][1]) <= 10<sup>5</sup></code></li>
|
||
<li>在任意 <code>"MESSAGE"</code> 事件中,以 <code>id<number></code> 形式提及的用户数目介于 <code>1</code> 和 <code>100</code> 之间。</li>
|
||
<li><code>0 <= <number> <= numberOfUsers - 1</code></li>
|
||
<li>题目保证 <code>OFFLINE</code> 引用的用户 id 在事件发生时处于 <strong>在线</strong> 状态。</li>
|
||
</ul>
|