Pairs of Songs With Total Durations Divisible by 60 - Array - Easy - LeetCode
💻 coding

Pairs of Songs With Total Durations Divisible by 60 - Array - Easy - LeetCode

1 min read 295 words
1 min read
ShareWhatsAppPost on X
  • 1The task is to count pairs of songs whose total duration is divisible by 60 seconds.
  • 2The solution utilizes a dictionary to track song durations modulo 60 for efficient counting.
  • 3The algorithm operates with a time complexity of O(n) and space complexity of O(n).

AI-generated summary · May not capture all nuances

Key Insight
AskGif

"The task is to count pairs of songs whose total duration is divisible by 60 seconds."

Pairs of Songs With Total Durations Divisible by 60 - Array - Easy - LeetCode

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 such that 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

Solution:

using System;
using System.Collections.Generic;
using System.Text;

namespace LeetCode.AskGif.Easy.Array
{
 public class NumPairsDivisibleBy60Soln
 {
 public int NumPairsDivisibleBy60(int[] time)
 {
 var map = new Dictionary<int, int>();
 int count = 0;
 int val = 0;
 int diff = 0;
 for (int i = 0; i < time.Length; i++)
 {
 val = time[i] % 60;
 diff = (60 - val) % 60;
 if (map.ContainsKey(diff))
 {
 count += map[diff];
 }

 if (map.ContainsKey(val))
 {
 map[val]++;
 }
 else
 {
 map.Add(val, 1);
 }
 }

 return count;
 }
 }
}

Time Complexity: O(n)

Space Complexity: O(n)

Unit Tests:

using LeetCode.AskGif.Easy.Array;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Text;

namespace CodingUnitTest.Easy.Array
{
 [TestClass]
 public class NumPairsDivisibleBy60SolnTests
 {
 [TestMethod]
 public void NumPairsDivisibleBy60Soln_First()
 {
 var arr = new int[] { 30, 20, 150, 100, 40 };
 var expected = 3;

 var res = new NumPairsDivisibleBy60Soln().NumPairsDivisibleBy60(arr);
 Assert.AreEqual(expected, res);
 }

 [TestMethod]
 public void NumPairsDivisibleBy60Soln_Second()
 {
 var arr = new int[] { 60, 60, 60 };
 var expected = 3;

 var res = new NumPairsDivisibleBy60Soln().NumPairsDivisibleBy60(arr);
 Assert.AreEqual(expected, res);
 }
 }
}

Enjoyed this article?

Share it with someone who'd find it useful.

ShareWhatsAppPost on X

AskGif

Published on 20 June 2020 · 1 min read · 295 words

Part of AskGif Blog · coding

You might also like