前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 1010. 总持续时间可被 60 整除的歌曲(哈希)

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

作者头像
Michael阿明
发布2020-07-13 16:11:35
5570
发布2020-07-13 16:11:35
举报

1. 题目

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

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

代码语言:javascript
复制
示例 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. 解题

  • 暴力法,不可取,会超时
代码语言:javascript
复制
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的数组内
  • 对歌曲数进行排列组合即可
代码语言:javascript
复制
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;//组合数Cn2
        for(int i = 1; i < 30; ++i)
        {
        	ans += t[i]*t[60-i];
        }
        return ans;
    }
};
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档