05 August 2008
给一个二维数组,数组中的每个元素都是两个整数[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;
}
}