LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
廚房里總共有 n 個橘子,你決定每一天選擇如下方式之一吃這些橘子:
- 吃掉一個橘子。
- 如果剩余橘子數 n 能被 2 整除,那么你可以吃掉 n/2 個橘子。
- 如果剩余橘子數 n 能被 3 整除,那么你可以吃掉 2*(n/3) 個橘子。
每天你只能從以上 3 種方案中選擇一種方案。
請你返回吃掉所有 n 個橘子的最少天數。
示例 1: 輸入:n = 10 輸出:4 解釋:你總共有 10 個橘子。 第 1 天:吃 1 個橘子,剩余橘子數 10 - 1 = 9。 第 2 天:吃 6 個橘子,剩余橘子數 9 - 2*(9/3) = 9 - 6 = 3。(9 可以被 3 整除) 第 3 天:吃 2 個橘子,剩余橘子數 3 - 2*(3/3) = 3 - 2 = 1。 第 4 天:吃掉最后 1 個橘子,剩余橘子數 1 - 1 = 0。 你需要至少 4 天吃掉 10 個橘子。示例 2: 輸入:n = 6 輸出:3 解釋:你總共有 6 個橘子。 第 1 天:吃 3 個橘子,剩余橘子數 6 - 6/2 = 6 - 3 = 3。(6 可以被 2 整除) 第 2 天:吃 2 個橘子,剩余橘子數 3 - 2*(3/3) = 3 - 2 = 1。(3 可以被 3 整除) 第 3 天:吃掉剩余 1 個橘子,剩余橘子數 1 - 1 = 0。 你至少需要 3 天吃掉 6 個橘子。示例 3: 輸入:n = 1 輸出:1示例 4: 輸入:n = 56 輸出:6提示: 1 <= n <= 2*10^9來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-number-of-days-to-eat-n-oranges
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
110 / 176 個通過測試用例,看數據 109, O(n) 都要超時
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);//吃一個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 廣度優先搜索,vis記錄訪問過的,避免重復訪問
152 ms 22 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 644. 最大平均子段
- 下一篇: LeetCode 1679. K 和数对