package com.fishercoder.solutions;

import java.util.HashMap;
import java.util.Map;

/**
 * 1010. Pairs of Songs With Total Durations Divisible by 60
 *
 * In a list of songs, the i-th song has a duration of time[i] seconds.
 *
 * Return the number of pairs of songs for which their total duration in seconds is divisible by 60.
 * Formally, we want the number of indices i < j with (time[i] + time[j]) % 60 == 0.
 *
 * Example 1:
 * Input: [30,20,150,100,40]
 * Output: 3
 * Explanation: Three pairs have a total duration divisible by 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
 *
 * Example 2:
 * Input: [60,60,60]
 * Output: 3
 * Explanation: All three pairs have a total duration of 120, which is divisible by 60.
 *
 * Note:
 *
 * 1 <= time.length <= 60000
 * 1 <= time[i] <= 500
 * */
public class _1010 {
    public static class Solution1 {
        /**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
         *
         * Think of Problem 1: Two Sum
         * Assume target is 60, each item in time % 60.
         * Then this problem becomes very similar to Problem 1.
         * */
        public int numPairsDivisibleBy60(int[] time) {
            int result = 0;
            Map<Integer, Integer> map = new HashMap<>();
            for (int t : time) {
                int d = (60 - t % 60) % 60;
                if (map.containsKey(d)) {
                    result += map.get(d);
                }
                map.put(t % 60, map.getOrDefault(t % 60, 0) + 1);
            }
            return result;
        }
    }
}

@@ -82,832 +82,8 @@
 p;%0A%0A
-/**%0A * 1010. Pairs of Songs With Total Durations Divisible by 60%0A *%0A * In a list of songs, the i-th song has a duration of time%5Bi%5D seconds.%0A *%0A * Return the number of pairs of songs for which their total duration in seconds is divisible by 60.%0A * Formally, we want the number of indices i %3C j with (time%5Bi%5D + time%5Bj%5D) %25 60 == 0.%0A *%0A * Example 1:%0A * Input: %5B30,20,150,100,40%5D%0A * Output: 3%0A * Explanation: Three pairs have a total duration divisible by 60:%0A * (time%5B0%5D = 30, time%5B2%5D = 150): total duration 180%0A * (time%5B1%5D = 20, time%5B3%5D = 100): total duration 120%0A * (time%5B1%5D = 20, time%5B4%5D = 40): total duration 60%0A *%0A * Example 2:%0A * Input: %5B60,60,60%5D%0A * Output: 3%0A * Explanation: All three pairs have a total duration of 120, which is divisible by 60.%0A *%0A * Note:%0A *%0A * 1 %3C= time.length %3C= 60000%0A * 1 %3C= time%5Bi%5D %3C= 500%0A * */%0A
 publ
@@ -146,16 +146,28 @@
      /**
+%0A         * 
 Credit: 
@@ -317,16 +317,20 @@
        *
+ %3Cp%3E
 %0A       
@@ -489,18 +489,16 @@
         
- *
  */%0A    

refactor 1010