leetcode--1010.总持续时间可被60整除的歌曲

题目描述:
在这里插入图片描述示例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 整数。

思路:

定义一个int类型的count,初始值为0,用来记录最终的结果
创建一个shuzu数组,长度等于60,每一首"歌曲"的时间对60取余,然后shuzu中对应的的区域的值+1.这样,新数组中每个角标对应的值就是对60取余的数字的个数和。
对于角标从1到30的数组元素,那么只需要count+=shuzu[j]*shuzu[60-j].
但是,对于角标为0和30来说比较特殊,因为0和30他们自身就可以两两成对。所以是count+=(shuzu[0]*(shuzu[0]-1)+shuzu[30]*(shuzu[30]-1))/2,最终结果除2是因为自身成对时有顺序的要求,题中说明一对数字在满足是60的倍数时也要i<j.

java代码

class Solution {
    public int numPairsDivisibleBy60(int[] time) {
        if(time.length==0||time.length==1){
            return 0;
        }
        int[] shuzu = new int[60];
        for(int i=0;i<time.length;i++){
            shuzu[time[i]%60]++;
        }
        int count=0;
        for (int i = 1; i < 30; i++) {
            count += shuzu[i] * shuzu[60 - i];
        }
        count += (shuzu[0] * (shuzu[0] - 1) + shuzu[30] * (shuzu[30] - 1)) / 2;
        return count;
    }
}

在这里插入图片描述

发布了73 篇原创文章 · 获赞 7 · 访问量 3571

猜你喜欢

转载自blog.csdn.net/weixin_43801718/article/details/103449357
今日推荐