码迷,mamicode.com
首页 > 其他好文 > 详细

Pairs of Songs With Total Durations Divisible by 60 LT1010

时间:2019-04-08 09:11:39      阅读:131      评论:0      收藏:0      [点我收藏+]

标签: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. 1 <= time.length <= 60000
  2. 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!