1103 分糖果 II(數學 模擬) M,S

2021-10-20 20:16:46 字數 1082 閱讀 8857

我的解法:模擬整個分配糖果的過程:時間複雜度為o(m

ax(c

andi

es,n

))o(max(\sqrt, n))

o(max(

cand

ies​

,n))

,n是人數。

class

solution

else

} times += num_people;

// 分配的輪數

}return getcandy;

}}

——簡單優化的話,可以將for迴圈刪除,直接乙個while迴圈即可,

數學解法:o(n)

首先,求出最後一次分配中,那個孩子得到的糖果數:

接下來,計算發放的輪數:s/n

s/ns/

n(s代表次數,n代表人數),s%n,就是最後一輪中,還能分到糖果的孩子個數:

所以,對於普通孩子:kids[i]=i+(i+n)+(i+2n)+…(i+(rows-1)∗n),row = s/n

——又是等差數列:kids[i] = i∗r

ows+

n∗ro

ws(r

ow−1

))2i*rows + \frac

i∗rows

+2n∗

rows

(row

−1))

​如果是特殊孩子,即最後一輪還能分到的孩子:直接在後面加即可:

class

solution

getcandy[extra]

+= remain;

return getcandy;

}}

——數學解法比較複雜,在時間有限的情況下,我選擇直接用模擬方法

參考:

1103 分糖果 II(簡單題)

題目描述 排排坐,分糖果。我們買了一些糖果 candies,打算把它們分給排好隊的 n num people 個小朋友。給第乙個小朋友 1 顆糖果,第二個小朋友 2 顆,依此類推,直到給最後乙個小朋友 n 顆糖果。然後,我們再回到隊伍的起點,給第乙個小朋友 n 1 顆糖果,第二個小朋友 n 2 顆,...

力扣1103 分糖果 II 解題記錄

題目 假設有m個糖果,n位小朋友。如果每個小朋友都分到一次算一輪,假設能分t輪,分完t輪後剩r個。即 知道了t也就求出了r m t。然後問題就簡單了,在前t輪中每個小朋友分到的糖果可以通過等差數列求和得出。第t 1輪就乙個小朋友乙個小朋友的分。第i個小朋友應該分t num people i個,若分完...

力扣 1103 分糖果 II C

排排坐,分糖果。我們買了一些糖果 candies,打算把它們分給排好隊的 n num people 個小朋友。給第乙個小朋友 1 顆糖果,第二個小朋友 2 顆,依此類推,直到給最後乙個小朋友 n 顆糖果。然後,我們再回到隊伍的起點,給第乙個小朋友 n 1 顆糖果,第二個小朋友 n 2 顆,依此類推,...