LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
廚房里總共有 n 個(gè)橘子,你決定每一天選擇如下方式之一吃這些橘子:
- 吃掉一個(gè)橘子。
- 如果剩余橘子數(shù) n 能被 2 整除,那么你可以吃掉 n/2 個(gè)橘子。
- 如果剩余橘子數(shù) n 能被 3 整除,那么你可以吃掉 2*(n/3) 個(gè)橘子。
每天你只能從以上 3 種方案中選擇一種方案。
請(qǐng)你返回吃掉所有 n 個(gè)橘子的最少天數(shù)。
示例 1: 輸入:n = 10 輸出:4 解釋:你總共有 10 個(gè)橘子。 第 1 天:吃 1 個(gè)橘子,剩余橘子數(shù) 10 - 1 = 9。 第 2 天:吃 6 個(gè)橘子,剩余橘子數(shù) 9 - 2*(9/3) = 9 - 6 = 3。(9 可以被 3 整除) 第 3 天:吃 2 個(gè)橘子,剩余橘子數(shù) 3 - 2*(3/3) = 3 - 2 = 1。 第 4 天:吃掉最后 1 個(gè)橘子,剩余橘子數(shù) 1 - 1 = 0。 你需要至少 4 天吃掉 10 個(gè)橘子。示例 2: 輸入:n = 6 輸出:3 解釋:你總共有 6 個(gè)橘子。 第 1 天:吃 3 個(gè)橘子,剩余橘子數(shù) 6 - 6/2 = 6 - 3 = 3。(6 可以被 2 整除) 第 2 天:吃 2 個(gè)橘子,剩余橘子數(shù) 3 - 2*(3/3) = 3 - 2 = 1。(3 可以被 3 整除) 第 3 天:吃掉剩余 1 個(gè)橘子,剩余橘子數(shù) 1 - 1 = 0。 你至少需要 3 天吃掉 6 個(gè)橘子。示例 3: 輸入:n = 1 輸出:1示例 4: 輸入:n = 56 輸出:6提示: 1 <= n <= 2*10^9來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-number-of-days-to-eat-n-oranges
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
110 / 176 個(gè)通過(guò)測(cè)試用例,看數(shù)據(jù) 109, O(n) 都要超時(shí)
class Solution { public:int minDays(int n) {vector<int> dp(n+1, INT_MAX);dp[0] = 0;for(int i = 0; i < n; ++i){if(dp[i] == INT_MAX)continue;dp[i+1] = min(dp[i+1], dp[i]+1);//吃一個(gè)if((n-i)%2 == 0)dp[i+(n-i)/2] = min(dp[i+(n-i)/2], dp[i]+1);if((n-i)%3 == 0)dp[i+2*(n-i)/3] = min(dp[i+2*(n-i)/3], dp[i]+1);}return dp[n];} };- BFS 廣度優(yōu)先搜索,vis記錄訪問(wèn)過(guò)的,避免重復(fù)訪問(wèn)
152 ms 22 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 644. 最大平均子段
- 下一篇: LeetCode MySQL 1070.