1013. 总持续时间可被 60 整除的歌曲

题目链接:https://leetcode-cn.com/contest/weekly-contest-128/problems/pairs-of-songs-with-total-durations-divisible-by-60/
题集:https://blog.csdn.net/weixin_39778570/article/details/83187443

  1. 总持续时间可被 60 整除的歌曲 显示英文描述
    用户通过次数 450
    用户尝试次数 595
    通过次数 456
    提交次数 1236
    题目难度 Easy
    在歌曲列表中,第 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

分析

关键是i<j,暴力肯定T了
所以呢,对于每个当前的i,我们统计所有下标不大于i的数的个数,然后根据i算出答案,统计答案,再更新统计好的数据,进入下标i+1
所有数用 time[i]%60存起来,然后和time[i]匹配的为:(60-time[i]%60)%60

code
#include<bits/stdc++.h>
using namespace std;
int num[65];
int numPairsDivisibleBy60(vector<int>& time) {
	int ans = 0;
	// (x+t)%60==0
	// -->60 - x%60 
	for(auto x : time){
		ans += num[(120-x%60)%60];
		num[x%60]++;
	}
	return ans;
}
int main(){
	vector<int> v = {30,20,150,100,40};
	cout<<numPairsDivisibleBy60(v);
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值