陣列(簡單題) 總持續時間可被 60 整除的歌曲

2021-10-06 03:16:09 字數 1556 閱讀 5985

在歌曲列表中,第 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:

/**方法1:雙層迴圈暴力求解

** 時間複雜度:o(n2)

* 空間複雜度:o(1)

*/public

intnumpairsdivisibleby60method1

(int

time)}}

return count;

}

方法2:

/**方法二:餘數法

* 思路:

* 1.整數對60取模,可能有60種餘數。故初始化乙個長度為60的陣列,統計各餘數出現的次數。

* 2.遍歷time陣列,每個值對60取模,並統計每個餘數值(0-59)出現的個數。因為餘數部分需要找到合適的cp組合起來能被60整除。

* 3.餘數為0的情況,只能同餘數為0的情況組合(如60s、120s等等)。0的情況出現k次,則只能在k中任選兩次進行兩兩組合。用k * (k - 1) / 2表示。

* 4.餘數為30的情況同上。

* 5.其餘1與59組合,2與58組合,故使用雙指標分別從1和59兩頭向中間遍歷。1的情況出現m次,59的情況出現n次,則總共有m*n種組合。

* 時間複雜度:o(n)

* 空間複雜度:o(1)

*/public

static

intnumpairsdivisibleby60method2

(int

time)

//統計餘數為0

count += seconds[0]

*(seconds[0]

-1)/

2;//統計餘數為30

count += seconds[30]

*(seconds[30]

-1)/

2;//統計其他

int i =

1,j =59;

while

(i < j)

return count;

}

總持續時間可被 60 整除的歌曲

總持續時間可被 60 整除的歌曲 在歌曲列表中,第 i 首歌曲的持續時間為 time i 秒。返回其總持續時間 以秒為單位 可被 60 整除的歌曲對的數量。形式上,我們希望索引的數字 i 和 j 滿足 i j 且有 time i time j 60 0。示例 1 輸入 30,20,150,100,4...

總持續時間可被60整除的歌曲

在歌曲列表中,第 i 首歌曲的持續時間為 time i 秒。返回其總持續時間 以秒為單位 可被 60 整除的歌曲對的數量。形式上,我們希望索引的數字 i 和 j 滿足 i j 且有 time i time j 60 0。示例 1 輸入 30,20,150,100,40 輸出 3 解釋 這三對的總持續...

1010 總持續時間可被 60 整除的歌曲

1010.總持續時間可被 60 整除的歌曲 1010.總持續時間可被 60 整除的歌曲 我們可以用map將每個數對應的取模結果還有個數存起來,這樣i從 1,30 map i map 60 i 就是一部分的解了,這樣就不用考慮順序了,每種情況這樣相乘就行了,還有當i 30的時候,就是n n 1 2的結...