日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)

發布時間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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記錄訪問過的,避免重復訪問
class Solution { public:int minDays(int n) {unordered_set<int> vis;queue<int> q;q.push(0);int d = 0, size, eat;while(!q.empty()){size = q.size();while(size--){eat = q.front();q.pop();if(eat == n)return d;if(!vis.count(eat+1)){q.push(eat+1);vis.insert(eat+1);}if((n-eat)%2 == 0 && !vis.count(eat+(n-eat)/2)){q.push(eat+(n-eat)/2);vis.insert(eat+(n-eat)/2);}if((n-eat)%3 == 0 && !vis.count(eat+(n-eat)/3*2)){q.push(eat+(n-eat)/3*2);//注意先除再乘,避免溢出vis.insert(eat+(n-eat)/3*2);}}d++;}return -1;} };

152 ms 22 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 1553. 吃掉 N 个橘子的最少天数(BFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。