这是小川的第377次更新,第405篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第239题(顺位题号是1010)。在歌曲列表中,第i首歌曲的持续时间为[i]秒。

返回其总持续时间(以秒为单位)可被60整除的歌曲对的数量,即当i <j时,(time[i] + time[j])%60 == 0

例如:

输入:[30,20,150,100,40]

输出:3

说明:三对总持续时间可被60整除:

(time[0] = 30,time[2] = 150):总持续时间180

(time[1] = 20,time[3] = 100):总持续时间120

(time[1] = 20,time[4] = 40):总持续时间60

输入:[60,60,60]

输出:3

说明:所有三对的总持续时间为120,可被60整除。

注意

  • 1 <= time.length <= 60000

  • 1 <= time[i] <= 500

02 第一种解法

暴力解法,使用两层for循环,但是会超时。

public int numPairsDivisibleBy60(int[] time) {
int count = 0, n = time.length;
for (int i=0; i<n; i++) {
for (int j=i+1; j<n; j++) {
if ((time[i]+time[j])%60 == 0) {
count++;
}
}
}
return count;
}

03 第二种解法

我们需要将时间复杂度降到O(N),就得重新考虑time中的元素值特性。

例如[30,20,150,100,40],其中30和150可以配对,20和100可以配对,20和40可以配对,这三对数之和都可以被60整除,那我们可以事先就将这些数简化一步,对60取余,得到[30,20,30,40,40],新的数范围是[0,59],那么只要后面出现的数能在前面找到一个数,两者互补(即两者之和等于60的倍数),即60-temp = temp2; temp2temp的后面出现,变成伪代码就是60-time[i]%60

但是换到另外一个例子上来看,[60,60,60],取余后变成了[0,0,0],再用60去减,发现没有可以配对的数,那我们就再取余一次,即(60-time[i]%60)%60,这样就可以处理那些本身是60的倍数的数。

思路:先对time中的数用60进行取余运算,使用一个HashMapkey为新数组的元素值,value为出现次数,遍历新数组中的元素num,找到(60-num)%60HashMap中的value值,进行累加,最后输出。

public int numPairsDivisibleBy602(int[] time) {
for (int i=0; i<time.length; i++) {
time[i] %= 60;
}
int count = 0;
Map<Integer, Integer> map = new HashMap<Integer,Integer>();
for (int num : time) {
count += map.getOrDefault((60-num)%60, 0);
map.put(num, map.getOrDefault(num, 0)+1);
}
return count;
}

04 第三种解法

思路和第二种解法一样,将HashMap换成int数组。

public int numPairsDivisibleBy603(int[] time) {
int[] count = new int[60];
int result = 0;
for (int num : time) {
result += count[(60-num%60)%60];
count[num%60]++;
}
return result;
}

05 小结

算法专题目前已连续日更超过七个月,算法题文章245+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,好看、留言、转发就是对我最大的回报和支持!

LeetCode.1010-歌曲总长度可被60整除的对数的更多相关文章

  1. Leetcode 1013. 总持续时间可被 60 整除的歌曲

    1013. 总持续时间可被 60 整除的歌曲  显示英文描述 我的提交返回竞赛   用户通过次数450 用户尝试次数595 通过次数456 提交次数1236 题目难度Easy 在歌曲列表中,第 i 首 ...

  2. 力扣(LeetCode) 1010. 总持续时间可被 60 整除的歌曲

    在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒. 返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量.形式上,我们希望索引的数字 i < j 且有 (time[i] + ...

  3. [Swift]LeetCode1010. 总持续时间可被 60 整除的歌曲 | Pairs of Songs With Total Durations Divisible by 60

    In a list of songs, the i-th song has a duration of time[i] seconds. Return the number of pairs of s ...

  4. 1013. Pairs of Songs With Total Durations Divisible by 60总持续时间可被 60 整除的歌曲

    网址:https://leetcode.com/problems/pairs-of-songs-with-total-durations-divisible-by-60/submissions/ 参考 ...

  5. 一条直线上N个线段所覆盖的总长度

    原文:http://blog.csdn.net/bxyill/article/details/8962832 问题描述: 现有一直线,从原点到无穷大. 这条直线上有N个线段.线段可能相交. 问,N个线 ...

  6. Mongoose 分页查询优化、获取数据总长度

    无论是传统网页还是 ajax api,我们都不得不进行数据分页,一来节省带宽二来提升页面响应速度.作为一个数据完备的 web 应用,做好分页功能能极大提升用户体验. 简单的分页查询 在 mongoos ...

  7. js 只能输入英文和数字,且首位必须是字母,字母总数不能超过3个,总长度不能超过20!

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  8. LeetCode:第K个排列【60】

    LeetCode:第K个排列[60] 题目描述 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: &quo ...

  9. LeetCode 209:最小长度的子数组 Minimum Size Subarray Sum

    公众号: 爱写bug(ID:icodebugs) 作者:爱写bug 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子 ...

随机推荐

  1. PMBOK :美国的项目管理知识体系

    PMBOK 是Project Management Body Of Knowledge的缩写, 指项目管理知识体系的意思,具体是美国项目管理协会(PMI)对项目管理所需的知识.技能和工具进行的概括性描 ...

  2. Web前端经典面试试题(一)

    本篇收录了一些面试中经常会遇到的经典面试题,并且都给出了我在网上收集的答案.眼看新的一年马上就要开始了,相信很多的前端开发者会有一些跳槽的悸动,通过对本篇知识的整理以及经验的总结,希望能帮到更多的前端 ...

  3. 2018年最佳JavaScript数据可视化和图表库

    现在有很多图表库,但哪一个最好用?这可能取决于许多因素,如业务需求,数据类型,图表本身的目的等等.在本文中,每个JavaScript图表库将与一些关键因素进行比较,包括图表类型,商业或免费和开源状态. ...

  4. oracle 数据库安装及jdbc的连接

    今天,我在oracle的官网下载了数据库并进行安装,其中遇到一些问题,在此进行记录. 1.下载,之后,按照网上的教程进行安装,开始遇到 下载之后出现11g 出现ins13001环境不满足最低要求 这个 ...

  5. puppet集群

    实验目的:        由于现有的环境中,puppetmaster是单节点,客户端更新时出现了更新失败和时间较长等现象.考虑将puppetmaster做成集群的模式,解决大量客户端更新延时和单节点故 ...

  6. mahout从入门到放弃--安装(1)

    1.稀里糊涂下载 我的集群是hadoop 2.7.3 ,本来想找到对应的mahout版本,但是没有找到.本着安全原则,mahout最新版本是0.14.0,回退一个版本使用0.13.0 mahout地址 ...

  7. 依赖jquery的select皮肤2

    这个下拉菜单存在于body中,不会受select父级overflow的影响,同样依赖于jquery. 缺陷是如果select上的样式不是定义在class上的,不能完全获取select上的样式. 不过, ...

  8. iOS设置UITableViewCell的选中时的颜色

    1.系统默认的颜色设置 //无色   cell.selectionStyle = UITableViewCellSelectionStyleNone;     //蓝色   cell.selectio ...

  9. oracle-linux7 镜像地址 secuCRT 注册-linux内核

    http://mirrors.dotsrc.org/oracle-linux/OL7/u4/x86_64/ secuCRT 注册 https://github.com/hanxianzhai/Secu ...

  10. cogs157. [USACO Nov07] 奶牛跨栏 x

    157. [USACO Nov07] 奶牛跨栏 ★★   输入文件:hurdles.in   输出文件:hurdles.out   简单对比时间限制:1 s   内存限制:128 MB 译 by Cm ...