标签:int form pre content += href ref cond example
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.
Idea 1. Similar to Two Sum LT1, map with modular arithmetic
1 class Solution { 2 public int numPairsDivisibleBy60(int[] time) { 3 Map<Integer, Integer> record = new HashMap<>(); 4 int count = 0; 5 for(int val: time) { 6 val = val%60; 7 count += record.getOrDefault((60 - val)%60, 0); 8 record.put(val, record.getOrDefault(val, 0) + 1); 9 } 10 11 return count; 12 } 13 }
array used as map
1 class Solution { 2 public int numPairsDivisibleBy60(int[] time) { 3 int[] record = new int[60]; 4 int count = 0; 5 for(int val: time) { 6 val = val%60; 7 count += record[(60 - val)%60]; 8 ++record[val]; 9 } 10 11 return count; 12 } 13 }
Idea 1a. count pairs, preprose the array first
1 class Solution { 2 public int numPairsDivisibleBy60(int[] time) { 3 int[] record = new int[60]; 4 for(int val: time) { 5 val = val%60; 6 ++record[val]; 7 } 8 9 int count = 0; 10 if(record[0] > 0) { 11 count += record[0] * (record[0]-1)/2; 12 } 13 14 if(record[30] > 0) { 15 count += record[30] * (record[30]-1)/2; 16 } 17 18 for(int i = 1; i < 30; ++i) { 19 count += record[i]*record[60-i]; 20 } 21 return count; 22 } 23 }
Note:
1 <= time.length <= 60000
1 <= time[i] <= 500
Pairs of Songs With Total Durations Divisible by 60 LT1010
标签:int form pre content += href ref cond example
原文地址:https://www.cnblogs.com/taste-it-own-it-love-it/p/10668341.html