LeetCode 1010. Pairs of Songs With Total Durations Divisible by 60

问题

在歌曲列表中,第i首歌有一个持续time[i]秒。
返回歌曲总时长(秒)可被60整除的歌曲对数。即返回能使time[i]+time[j]能被60整除的i,j对数。

输入: [30,20,150,100,40]
输出: 3
解释: 有三对i,j使得歌曲持续时间之和能被60整除:
(time[0] = 30, time[2] = 150): total duration 180
(time[1] = 20, time[3] = 100): total duration 120
(time[1] = 20, time[4] = 40): total duration 60

解析

这一题用双重循环遍历会超时,而且也没必要。我们由2sum问题想到一种简单的解。首先要想时间之和能被60整除,那么只需要保证它们对60取余后加起来和能被60整除即可。 因此,问题变成了余数部分的匹配。

Java代码

    public int numPairsDivisibleBy60(int[] time) {
        int count=0;
        int mo[] = new int[60];
        for(int i=0;i<time.length;i++){
            mo[time[i]%60]++;
        }
        for(int i=0;i<=30;i++){
            if(i==30||i==0){
                count+=(mo[i]*(mo[i]-1))/2;
            }
            else{
                count+=mo[i]* mo[60-i];
            }
        }
        return count;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值