GuilinDev

Lc1817

05 August 2008

1817. Finding the Users Active Minutes

给一个二维数组,数组中的每个元素都是两个整数[id, time],表示某个ID的用户在某个time(按分钟计算)执行了某个操作,多个用户可以同时在一个分钟操作

指定用户的 用户活跃分钟数(user active minutes,UAM) 定义为用户执行操作的 唯一分钟数 。 即使一分钟内执行多个操作,也只能按一分钟计数

示例 1:

1
2
3
4
5
6
    输入:logs = [[0,5],[1,2],[0,2],[0,5],[1,3]], k = 5
    输出:[0,2,0,0,0]
    解释:
    ID=0 的用户执行操作的分钟分别是:5 、2 和 5 。因此,该用户的用户活跃分钟数为 2(分钟 5 只计数一次)
    ID=1 的用户执行操作的分钟分别是:2 和 3 。因此,该用户的用户活跃分钟数为 2
    2 个用户的用户活跃分钟数都是 2 ,answer[2] 为 2 ,其余 answer[j] 的值都是 0

示例 2:

1
2
3
4
5
6
7
    输入:logs = [[1,1],[2,2],[2,3]], k = 4
    输出:[1,1,0,0]
    解释:
    ID=1 的用户仅在分钟 1 执行单个操作。因此,该用户的用户活跃分钟数为 1
    ID=2 的用户执行操作的分钟分别是:2 和 3 。因此,该用户的用户活跃分钟数为 2
    1 个用户的用户活跃分钟数是 1 ,1 个用户的用户活跃分钟数是 2 
    因此,answer[1] = 1 ,answer[2] = 1 ,其余的值都是 0

id直接从小到达,id相同时按操作数从小到达排序;然后遍历统计即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
    public int[] findingUsersActiveMinutes(int[][] logs, int k) {
        int[] usm = new int[k];
        Arrays.sort(logs, (a, b) -> {
            if (a[0] == b[0]) return a[1] - b[1];
            return a[0] - b[0];
        });
        int x = logs[0][0], y = logs[0][1], n = 0;
        for (int i = 1; i < logs.length; i++) {
            if (x != logs[i][0]) {
                usm[n]++;
                n = 0;
                x = logs[i][0];
                y = logs[i][1];
            } else {
                if (y < logs[i][1]) {
                    n++;
                    y = logs[i][1];
                }
            }
        }
        usm[n]++;
        return usm;
    }
}