2254. 设计视频共享平台 🔒
题目描述
你有一个视频分享平台,用户可以上传和删除视频。每个 video 都是 字符串 类型的数字,其中字符串的第 i 位表示视频中第 i 分钟的内容。例如,第一个数字表示视频中第 0 分钟的内容,第二个数字表示视频中第 1 分钟的内容,以此类推。视频的观众也可以喜欢和不喜欢视频。该平台会跟踪每个视频的 观看次数、点赞次数 和 不喜欢次数。
当视频上传时,它与最小可用整数 videoId 相关联,videoId 从 0 开始的。一旦一个视频被删除,与该视频关联的 videoId 就可以用于另一个视频。
实现 VideoSharingPlatform 类:
VideoSharingPlatform()初始化对象。int upload(String video)用户上传一个video. 返回与视频相关联的videoId。void remove(int videoId)如果存在与videoId相关联的视频,则删除该视频。String watch(int videoId, int startMinute, int endMinute)如果有一个视频与videoId相关联,则将该视频的观看次数增加1,并返回视频字符串的子字符串,从startMinute开始,以min(endMinute, video.length - 1)(含边界) 结束。否则,返回"-1"。void like(int videoId)如果存在与videoId相关联的视频,则将与videoId相关联的视频的点赞数增加1。void dislike(int videoId)如果存在与videoId相关联的视频,则将与videoId相关联的视频上的不喜欢次数增加1。int[] getLikesAndDislikes(int videoId)返回一个长度为2,下标从 0 开始 的整型数组,其中values[0]是与videoId相关联的视频上的点赞数,values[1]是不喜欢数。如果没有与videoId相关联的视频,则返回[-1]。int getViews(int videoId)返回与videoId相关联的视频的观看次数,如果没有与videoId相关联的视频,返回-1。
示例 1:
输入
["VideoSharingPlatform", "upload", "upload", "remove", "remove", "upload", "watch", "watch", "like", "dislike", "dislike", "getLikesAndDislikes", "getViews"]
[[], ["123"], ["456"], [4], [0], ["789"], [1, 0, 5], [1, 0, 1], [1], [1], [1], [1], [1]]
输出
[null, 0, 1, null, null, 0, "456", "45", null, null, null, [1, 2], 2]
解释
VideoSharingPlatform videoSharingPlatform = new VideoSharingPlatform();
videoSharingPlatform.upload("123"); // 最小的可用 videoId 是 0,所以返回 0。
videoSharingPlatform.upload("456"); // 最小的可用 videoId 是 1,所以返回 1。
videoSharingPlatform.remove(4); // 没有与 videoId 4 相关联的视频,所以什么都不做。
videoSharingPlatform.remove(0); // 删除与 videoId 0 关联的视频。
videoSharingPlatform.upload("789"); // 由于与 videoId 0 相关联的视频被删除,
// 0 是最小的可用 videoId,所以返回 0。
videoSharingPlatform.watch(1, 0, 5); // 与 videoId 1 关联的视频为 "456"。
// 从分钟 0 到分钟 min(5,3 - 1)= 2 的视频为 "456",因此返回 "456"。
videoSharingPlatform.watch(1, 0, 1); // 与 videoId 1 关联的视频为 "456"。
// 从分钟 0 到分钟 min(1,3 - 1)= 1 的视频为 "45",因此返回 "45"。
videoSharingPlatform.like(1); // 增加与 videoId 1 相关的视频的点赞数。
videoSharingPlatform.dislike(1); // 增加与 videoId 1 相关联的视频的不喜欢的数量。
videoSharingPlatform.dislike(1); // 增加与 videoId 1 相关联的视频的不喜欢的数量。
videoSharingPlatform.getLikesAndDislikes(1); // 在与 videoId 1 相关的视频中有 1 个喜欢和 2 个不喜欢,因此返回[1,2]。
videoSharingPlatform.getViews(1); // 与 videoId 1 相关联的视频有 2 个观看数,因此返回2。
示例 2:
输入 ["VideoSharingPlatform", "remove", "watch", "like", "dislike", "getLikesAndDislikes", "getViews"] [[], [0], [0, 0, 1], [0], [0], [0], [0]] 输出 [null, null, "-1", null, null, [-1], -1] 解释 VideoSharingPlatform videoSharingPlatform = new VideoSharingPlatform(); videoSharingPlatform.remove(0); // 没有与 videoId 0 相关联的视频,所以什么都不做。 videoSharingPlatform.watch(0, 0, 1); // 没有与 videoId 0 相关联的视频,因此返回 "-1"。 videoSharingPlatform.like(0); // 没有与 videoId 0 相关联的视频,所以什么都不做。 videoSharingPlatform.dislike(0); // 没有与 videoId 0 相关联的视频,所以什么都不做。 videoSharingPlatform.getLikesAndDislikes(0); // 没有与 videoId 0 相关联的视频,因此返回 [-1]。 videoSharingPlatform.getViews(0); // 没有视频与 videoId 0 相关联,因此返回 -1。
提示:
1 <= video.length <= 105- 调用
upload时所有video.length的总和不会超过105 video由数字组成0 <= videoId <= 1050 <= startMinute < endMinute < 105startMinute < video.length- 调用
watch时所有endMinute - startMinute的总和不会超过105。 - 所有函数 总共 最多调用
105次。
解法
方法一
1 | |
1 | |
1 | |
1 | |