前往
大廳
主題

LeetCode - 2591. Distribute Money to Maximum Children 解題心得

Not In My Back Yard | 2024-02-17 12:00:13 | 巴幣 0 | 人氣 59

題目連結:


題目意譯:
你被給定一個代表著你有多少錢的整數 money 以及另一個代表你需要將這些錢分給的小孩數量之整數 children。

你需要按照以下規則來分配金錢:
    所有的錢都必須都分發出去;
    每一個人都必須至少得到 1 塊錢;
    沒有人得到恰好 4 塊錢。

回傳根據以上規則分配金錢,收到恰好 8 塊錢的小孩數量最大值。如果不存在任何合法方式可以分配這筆錢,則回傳 -1。

限制:
1 ≦ money ≦ 200
2 ≦ children ≦ 30



範例測資:
範例 1:
輸入: money = 20, children = 3
輸出: 1
解釋:
收到恰好 8 塊錢的小孩數量最大值將為 1。其中一種分配金錢的方式為:
- 8 塊錢給第一個小孩。
- 9 塊錢給第二個小孩。
- 3 塊錢給第三個小孩。
可以證明不存在其他分配方式使得恰好得到 8 塊錢的小孩數量大於 1。

範例 2:
輸入: money = 16, children = 2
輸出: 2
解釋: 每一個小孩都可以給他們 8 塊錢。


解題思維:
首先,如果 money < children,則不可能在不違反第二條規則的情況下分配這筆錢。因此回傳 -1。

接著,如果 money > 8 × children,則我們可以看到可以給 children - 1 個小孩恰好 8 塊錢而剩下的全部給最後一個小孩。因此回傳 children - 1。



經過以上兩個條件之後,剩下的情況是 children ≦ money ≦ 8 × children。

而我們先根據第二個條件給每一位小孩 1 塊錢,因此現在剩餘金額 money' 位於 0(含)~ 7 × children(含)之間。

為了最大化所求,我們先強制給某些小孩恰好 8 塊錢。而這些小孩的數量 C 為 money' ÷ 7 之商數,而其餘數 r 為剩餘金額。

如果 r 不是 3,代表著我們可以隨便選一位小孩,然後把 r 塊錢塞給他(注意,0 ≦ r < 7,因此這個小孩必定不會包在所求內)。因此答案是 C。

而如果 r 是 3,則如果只給一位小孩,則會違反第三條規則。因此要試圖把這 3 塊錢分給至少兩位小孩。因此如果 C 位小孩以外剩兩位小孩以上(含),則我們可以安全地分給 C 位小孩 8 塊錢而不違反其他規則。因此回傳 C;但是如果只剩一位小孩,則我們必定需要放棄 C 位小孩中的一位來與最後一位瓜分這 3 塊錢,因此答案為 C - 1。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作