| 
 | 1 | +package com.fishercoder.solutions;  | 
 | 2 | + | 
 | 3 | +import java.util.HashMap;  | 
 | 4 | +import java.util.Map;  | 
 | 5 | + | 
 | 6 | +/**  | 
 | 7 | + * 1013. Pairs of Songs With Total Durations Divisible by 60  | 
 | 8 | + *  | 
 | 9 | + * In a list of songs, the i-th song has a duration of time[i] seconds.  | 
 | 10 | + *  | 
 | 11 | + * Return the number of pairs of songs for which their total duration in seconds is divisible by 60.  | 
 | 12 | + * Formally, we want the number of indices i < j with (time[i] + time[j]) % 60 == 0.  | 
 | 13 | + *  | 
 | 14 | + * Example 1:  | 
 | 15 | + * Input: [30,20,150,100,40]  | 
 | 16 | + * Output: 3  | 
 | 17 | + * Explanation: Three pairs have a total duration divisible by 60:  | 
 | 18 | + * (time[0] = 30, time[2] = 150): total duration 180  | 
 | 19 | + * (time[1] = 20, time[3] = 100): total duration 120  | 
 | 20 | + * (time[1] = 20, time[4] = 40): total duration 60  | 
 | 21 | + *  | 
 | 22 | + * Example 2:  | 
 | 23 | + * Input: [60,60,60]  | 
 | 24 | + * Output: 3  | 
 | 25 | + * Explanation: All three pairs have a total duration of 120, which is divisible by 60.  | 
 | 26 | + *  | 
 | 27 | + * Note:  | 
 | 28 | + *  | 
 | 29 | + * 1 <= time.length <= 60000  | 
 | 30 | + * 1 <= time[i] <= 500  | 
 | 31 | + * */  | 
 | 32 | +public class _1013 {  | 
 | 33 | +    public static class Solution1 {  | 
 | 34 | +        /**Credit: https://leetcode.com/problems/pairs-of-songs-with-total-durations-divisible-by-60/discuss/256726/Java-O(n)-code-w-comment-similar-to-Two-Sum  | 
 | 35 | +         *  | 
 | 36 | +         * Think of Problem 1: Two Sum  | 
 | 37 | +         * Assume target is 60, each item in time % 60.  | 
 | 38 | +         * Then this problem becomes very similar to Problem 1.  | 
 | 39 | +         * */  | 
 | 40 | +        public int numPairsDivisibleBy60(int[] time) {  | 
 | 41 | +            int result = 0;  | 
 | 42 | +            Map<Integer, Integer> map = new HashMap<>();  | 
 | 43 | +            for (int t : time) {  | 
 | 44 | +                int d = (60 - t % 60) % 60;  | 
 | 45 | +                if (map.containsKey(d)) {  | 
 | 46 | +                    result += map.get(d);  | 
 | 47 | +                }  | 
 | 48 | +                map.put(t % 60, map.getOrDefault(t % 60, 0) + 1);  | 
 | 49 | +            }  | 
 | 50 | +            return result;  | 
 | 51 | +        }  | 
 | 52 | +    }  | 
 | 53 | +}  | 
0 commit comments