c语言怎么实现连续整除10,leetcode-1010(总持续时间可被 60 整除的歌曲)--C语言实现...

这篇博客介绍了如何解决一个算法问题,即在给定的歌曲列表中找到总播放时间能被60整除的歌曲对。作者提出了两种方法,一种暴力求解导致运行超时,另一种利用哈希表优化,通过存储每个时间值模60的余数,高效地找出匹配的歌曲对。博客提供了具体的代码实现,并给出了示例输入和输出,展示了哈希表解决方案的有效性。
摘要由CSDN通过智能技术生成

求:

在歌曲列表中,第 i 首歌曲的持续时间为 time[i] 秒。

返回其总持续时间(以秒为单位)可被 60 整除的歌曲对的数量。形式上,我们希望索引的数字 i 和 j 满足  i < j 且有 (time[i] + time[j]) % 60 == 0。

示例 1:

输入:[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

示例 2:

输入:[60,60,60]

输出:3

解释:所有三对的总持续时间都是 120,可以被 60 整数。

提示:

1 <= time.length <= 60000

1 <= time[i] <= 500

解:

1、暴力法(运行超时):

int

numPairsDivisibleBy60(

int

* time,

int

timeSize){

int

i,j;

int

count=

0

;

for

(i=

0

;i

for

(j=i+

1

;j

if

((time[j]+time[j])%

60

==

0

) ++count;

}

return

count;

}

2、利用哈希表,先遍历输入数组,将输入数组模60后的余数存储在一个哈希表中,然后在哈希表中检索,如果余数的和能够匹配60,则增加计数。最后返回数量即可。注意这里的对数遵循乘法原理。

int

numPairsDivisibleBy60(

int

* time,

int

timeSize){

int

map[

60

] = {

0

};

int

i;

int

count =

0

;

for

(i=

0

;i

60

];

count += map[

0

]*(map[

0

]-

1

)/

2

;

for

(i=

1

;i<

30

;i++) count += map[i]*map[

60

-i];

count += map[

30

]*(map[

30

]-

1

)/

2

;

return

count;

}

来源:oschina

链接:https://my.oschina.net/u/4469818/blog/4279584

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值