欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1010. 总持续时间可被 60 整除的歌曲(哈希)

发布时间:2024/7/5 编程问答 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 LeetCode 1010. 总持续时间可被 60 整除的歌曲(哈希) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1. 题目

在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。

返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量。形式上,我们希望索引的数字 i < j 且有 (time[i] + time[j]) % 60 == 0。

示例 1: 输入:[30,20,150,100,40] 输出:3 解释:这三对的总持续时间可被 60 整数: (time[0] = 30, time[2] = 150): 总持续时间 180 (time[1] = 20, time[3] = 100): 总持续时间 120 (time[1] = 20, time[4] = 40): 总持续时间 60示例 2: 输入:[60,60,60] 输出:3 解释:所有三对的总持续时间都是 120,可以被 60 整数。提示: 1 <= time.length <= 60000 1 <= time[i] <= 500

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pairs-of-songs-with-total-durations-divisible-by-60
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 暴力法,不可取,会超时
class Solution { //暴力,超时代码 public:int numPairsDivisibleBy60(vector<int>& time) {int i, j, sum = 0;for(i = 0; i < time.size()-1; ++i)for(j = i+1; j < time.size(); ++j)if((time[i]+time[j])%60 == 0)sum++;return sum;} };
  • 采用数组,最简单的哈希映射
  • 对歌曲求模,歌曲落在0-59的数组内
  • 对歌曲数进行排列组合即可
class Solution { public:int numPairsDivisibleBy60(vector<int>& time) {int t[60] = {0};//求余后的秒数,对应的歌曲数for(int &s : time)t[s%60]++;int ans = 0;ans += t[0]*(t[0]-1)/2 + t[30]*(t[30]-1)/2;//组合数Cn2for(int i = 1; i < 30; ++i){ans += t[i]*t[60-i];}return ans;} };

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的LeetCode 1010. 总持续时间可被 60 整除的歌曲(哈希)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。