[leetcode #1010] Pairs of Songs With Total Durations Divisible by 60
2012 ワード
Problem
You are given a list of songs where the ith 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: time = [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: time = [60,60,60]
Output: 3
Explanation: All three pairs have a total duration of 120, which is divisible by 60.
Constraints:・ 1 <= time.length <= 6 * 10⁴
・ 1 <= time[i] <= 500
Idea
2曲の再生時間と分単位の個数を計算する問題です.
まず、再生時間の和を分単位にするには、60を0または60で割る.そのため、最初に与えられた再生時間を中心に残りの60点を1回ずつ点数化する.
残数が0または30の場合を除き、現在残数がiの場合、現在の数と残数が(60−i)の個数を乗算すると、可能な数となる.
残りが0または30の場合、n個の数から2個抽出されるので、n*(n−1)/2は数となる.
可能な場合は、総数を合わせて車に戻ればいいです.
Time Complexity: O(n)
Solution
class Solution {
public int numPairsDivisibleBy60(int[] time) {
int[] cnt = new int[60];
for (int duration : time) {
cnt[duration % 60]++;
}
int res = 0;
for (int i=1; i < 30; i++) {
res += cnt[i] * cnt[60-i];
}
res += cnt[0] * (cnt[0] - 1) / 2;
res += cnt[30] * (cnt[30] - 1) / 2;
return res;
}
}
結果はよかった!Reference
https://leetcode.com/problems/pairs-of-songs-with-total-durations-divisible-by-60/
Reference
この問題について([leetcode #1010] Pairs of Songs With Total Durations Divisible by 60), 我々は、より多くの情報をここで見つけました https://velog.io/@timevoyage/leetcode-1010-Pairs-of-Songs-With-Total-Durations-Divisible-by-60テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol