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

 class Solution {
public int numPairsDivisibleBy60(int[] time) {
Map<Integer, Integer> record = new HashMap<>();
int count = 0;
for(int val: time) {
val = val%60;
count += record.getOrDefault((60 - val)%60, 0);
record.put(val, record.getOrDefault(val, 0) + 1);
} return count;
}
}

array used as map

 class Solution {
public int numPairsDivisibleBy60(int[] time) {
int[] record = new int[60];
int count = 0;
for(int val: time) {
val = val%60;
count += record[(60 - val)%60];
++record[val];
} return count;
}
}

Idea 1a. count pairs, preprose the array first

 class Solution {
public int numPairsDivisibleBy60(int[] time) {
int[] record = new int[60];
for(int val: time) {
val = val%60;
++record[val];
} int count = 0;
if(record[0] > 0) {
count += record[0] * (record[0]-1)/2;
} if(record[30] > 0) {
count += record[30] * (record[30]-1)/2;
} for(int i = 1; i < 30; ++i) {
count += record[i]*record[60-i];
}
return count;
}
}

Note:

  1. 1 <= time.length <= 60000
  2. 1 <= time[i] <= 500

最新文章

  1. Struts2的经典入门
  2. Oralce 账户被锁后的解决办法
  3. jmeter的压力测试
  4. ABAP ALV单个单元格状态编辑-简单版本
  5. java产生随机数并求和
  6. VS2005打开VS2008 VS2010 VS2012
  7. Hibernate应用SQL查询返回实体类型
  8. Hive学习之五 《Hive进阶—UDF操作案例》 详解
  9. 【转】中断处理函数中不用disable_irq而用disable_irq_nosync原因
  10. 转:一个跨WINDOWS LINUX平台的线程类
  11. 第二章:2.8 通过Django 在web页面上面输出 “Hello word ”
  12. Linux(CentOS6.5)下修改Nginx初始化配置
  13. docker结合jenkins、gitlab实现.netcore的持续集成实践
  14. PHP单元测试使用
  15. Mac 下 Homebrew(类似CentOS下的yum)简介及安装
  16. AD采样的一个例子
  17. 127. Word Ladder(单词变换 广度优先)
  18. JavaWeb学习笔记(十七)—— 数据库连接池
  19. WPF数据视图学习
  20. 你所不知道的,Java 中操作符的秘密?

热门文章

  1. React DevTools
  2. 关于订单BOM替换组件不成功的问题
  3. scrapy 是指user_agent
  4. Ambertools15安装(详细)
  5. 算法篇【递归2 -- N皇后问题】
  6. 微信小程序开发小技巧——单击事件传参、动态修改样式、轮播样式修改等
  7. TZOJ 2999 Network(连通图割点数量)
  8. Python: 浅淡Python中的属性(property)
  9. C++ map中使用erase应该注意到的问题
  10. bbs项目引入富文本编辑器和处理xss攻击和文章预览