zoukankan      html  css  js  c++  java
  • 1010. 总持续时间可被 60 整除的歌曲

    在歌曲列表中,第 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
     
    【解法】这道题暴力法不好解决是因为会有巨大的数组,会超时。这里的想法是存一下数组里每个数除以60的余数,然后用组合的方法计算。
    对于余数为[1,29]的,它们可以与余数为[31,59]的组合;对于余数为0和30的,因为它们要跟自己组合,这里需要除以2。
    public class Test {
        public int numPairsDivisibleBy60(int[] time) {
            int count = 0;
            int[] mod = new int[60];
            for (int a: time) {
                mod[a%60]++;
            }
            for (int i = 1; i < 30; i++) {
                count += mod[i] * mod[60-i];
            }
            count += (mod[0]*(mod[0]-1) + mod[30]*(mod[30]-1)) / 2;
            return count;
        }
              
        public static void main(String[] args) {
            //int dis = 1;
            int[] nums = {60,60,60};
            System.out.println(new Test().numPairsDivisibleBy60(nums));
        }
    }
     
     
     
  • 相关阅读:
    Gym102501G Swapping Places(拓扑排序)
    2019SWERC题解
    CF364D Ghd(随机化)
    CF500E New Year Domino(并查集+栈)
    CF280C Game on Tree(期望)
    CF1093G Multidimensional Queries(线段树)
    CF677D Vanya and Treasure(最短路)
    CF788C The Great Mixing(最短路)
    queryset高级用法:prefetch_related
    queryset高级用法:select_related
  • 原文地址:https://www.cnblogs.com/pxy7896/p/12047478.html
Copyright © 2011-2022 走看看