1553. 吃掉 N 個橘子的最少天數(記憶化+貪心優化)

Problem: 1553. 吃掉 N 個橘子的最少天數

文章目錄

  • 題目
  • 思路
  • Code

題目

使得 n 變成0的操作有三種方式 :

  • 吃掉一個橘子。
  • 如果剩余橘子數 n 能被 2 整除,那么你可以吃掉 n/2 個橘子。
  • 如果剩余橘子數 n 能被 3 整除,那么你可以吃掉 2*(n/3) 個橘子。

思路

如果我們每天吃一個橘子(每次是操作1),那么從n到0要經過n天,所以最壞的情況下就是n。 要想保證天數最少,最好每天吃的最多。最暴力的方法就是

image.png

class Solution {
public:// 記錄吃掉n 個橘子的最少天數unordered_map<int,int> memo ; int minDays(int n) {if(n == 1 ) {memo[n] = 1 ; return 1 ; }if(memo.count(n)) {return memo[n] ; }if(n%2 == 0 && n%3 ==0 ){memo[n] = min( minDays(n/2), minDays(n/3)) +1  ;memo[n] = min(memo[n] ,minDays(n-1)) ; return memo[n] ; }else if(n %2 == 0 && n%3 !=0 ){return memo[n] = min (minDays(n/2) , minDays(n-1) ) +1 ; ; }else if( n%3 ==0 && n%2 !=0) {return memo[n] = min( minDays(n/3) , minDays(n-1) )+1  ; }else{return memo[n] = minDays(n-1) +1 ;}return memo[n] ; }
};

但是顯然是導致棧溢出

優化一下

我們肯定是希望吃掉一個橘子這樣的操作盡可能少(貪心)。優先選擇操作2和3.

  • 假設,我們對n 先進行k次操作,然后再進行操作2,那么橘子的數量就從n 變成了(n-k)/2 。 一共操作了 k+1次;如果我們先將n變成靠近2的倍數的那個數 n t ( n t < n n_{t} ( n_{t} < n nt?(nt?<n ),然后再執行操作1. 假設 k 0 k_{0} k0? ∣ n ? n t ∣ |n- n_{t}| n?nt?, k 0 k_{0} k0?是模2的余數,那么我們只需要執行 k 0 k_{0} k0? 次的操作1(靠近2的倍數) ,然后執行1次操作2 和 ( k ? k 0 ) (k-k_{0}) (k?k0?)次的操作1,即eq.1
    ( n ? k 0 ) 2 ? ( k ? k 0 ) 2 = ( n ? k ) 2 ( 1 ) \frac{(n-k_{0})}{2} -\frac{ (k-k_{0})}{2} = \frac{(n-k)}{2} (1) 2(n?k0?)??2(k?k0?)?=2(n?k)?1
    一共執行了 k 0 + 1 + ( k ? k 0 ) 2 k_{0} +1 + \frac{(k-k_{0})}{2} k0?+1+2(k?k0?)? 次 小于 k + 1 k+1 k+1次。
    同理操作3 也是可以這樣處理 。

Code

class Solution {
public:unordered_map<int,int> memo; int minDays(int n) {if(n <=1 ) return n ; if(memo.count(n) ) {return memo[n] ; }// 通過操作1減少到靠近2和3的倍數int k0_2 =  n%2 ; int k0_3 =  n%3 ; return memo[n] = min(k0_2 +minDays(n/2) , k0_3 +minDays(n/3) ) +1; }};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162552.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162552.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162552.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

易點易動設備管理系統提升設備能耗管理和設備狀態監控效率

如今&#xff0c;能源效率和設備狀態監控對于企業來說變得越發重要。傳統的設備管理方式往往存在能耗浪費和難以實時監控設備狀態的問題。為了解決這些問題&#xff0c;易點易動設備管理系統應運而生。本文將介紹易點易動設備管理系統的功能和優勢&#xff0c;以及如何通過它提…

Oracle數據庫安裝踩坑記錄

Oracle數據庫安裝踩坑記錄 踩坑目錄 可能會用到的教程1. 管理員用戶&#xff08;sys&#xff09;登錄oracle命令2. 默認密碼&#xff1a;三個 如果忘記改密碼參考 1. 登錄后修改密碼3. 查看賬號密碼&#xff1a;只有sys用戶登錄后才能查看4. sqldeveloper 連接oracle數據庫5. o…

簡墨的進化之路:打造大模型數據計算系統的云存儲底座

10月24日程序員節&#xff0c;「大模型數據計算系統」2023拓數派年度技術論壇在上海圓滿落幕&#xff0c;拓數派大模型數據計算系統&#xff08;PieDataComputingSystem&#xff0c;縮寫&#xff1a;πDataCS&#xff09;如約而至&#xff01;πDataCS 以云原生技術重構數據存儲…

論文淺嘗 | 用于文檔級事件關系抽取的稀疏事件表示的判別推理

筆記整理&#xff1a;鄒銘輝&#xff0c;天津大學碩士&#xff0c;研究方向為自然語言處理 鏈接&#xff1a;https://aclanthology.org/2023.acl-long.897 動機 文檔級事件關系抽取&#xff08;Document-level Event-Event Relation Extraction&#xff0c;簡稱DERE&#xff09…

vite配置proxy代理

如下代碼&#xff1a; "/cygl/api/cyfx" 和 "/cygl/api" 兩個代理配置。 如果將"/cygl/api/cyfx"放到"/cygl/api"的下邊&#xff0c;那么"/cygl/api/cyfx"代理將會失效。 因為他們的前置路徑一樣。會先行匹配掉/cygl/api 在…

【TypeScrpt算法】算法的復雜度分析

算法的復雜度分析 什么是算法復雜度&#xff1f; 不同的算法&#xff0c;其實效率是不一樣的 讓我舉一個案例來比較兩種不同的算法在查找數組中給定元素的時間復雜度 [1,2,3,4,5,6,7,...9999,n] 順序查找 這種方法從頭到尾遍歷整個數組&#xff0c;依次比較每個元素和給定元…

SAP-查看業務變更記錄

一、通過事務碼查詢修改記錄 1、輸入TCODE&#xff1a;AUT10&#xff0c;輸入時間和事務處理代碼&#xff0c;全部搜索輸入*。 2、點擊刷新&#xff0c;對已輸入的條件進行重置。 3、在左側下菜單&#xff0c;選擇要查詢的事務記錄&#xff0c;雙擊&#xff0c;會帶入“事務處…

【nlp】3.2 Transformer論文復現:1. 輸入部分(文本嵌入層和位置編碼器)

Transformer論文復現:輸入部分(文本嵌入層和位置編碼器) 1 輸入復現1.1 文本嵌入層1.1.1 文本嵌入層的作用1.1.2 文本嵌入層的代碼實現1.1.3 文本嵌入層中的注意事項1.2 位置編碼器1.2.1 位置編碼器的作用1.2.2 位置編碼器的代碼實現1.2.3 位置編碼器中的注意事項1 輸入復現…

探索結構體的奧秘

目錄 &#x1f342;結構體 1&#xff0c;結構體的聲明 1.1 結構的基礎知識 1.2 結構的聲明 1.3 特殊的聲明 1.4 結構的自引用 1.5 結構體變量的定義和初始化 1.6 結構體內存對齊 1.6.1 如何計算 1.6.2 為什么存在內存對齊 1.7 修改默認對齊數 1.8 結構體傳參 2&am…

3.7寸墨水屏藍牙卡證

超薄機身&#xff0c;厚度不足一厘米&#xff0c;輕松佩戴無負重感。 無需基站&#xff0c;服務器&#xff0c;手機APP直接更新~ 獨創快速掃描技術&#xff0c;智能感應標簽 超長待機&#xff0c;超低功耗&#xff0c;Type C接口充電&#xff0c;一次充電可續航一年&#xf…

極智開發 | 隨機初始化onnx模型權重的方法

歡迎關注我的公眾號 [極智視界],獲取我的更多經驗分享 大家好,我是極智視界,本文分享一下 隨機初始化onnx模型權重的方法。 邀您加入我的知識星球「極智視界」,星球內有超多好玩的項目實戰源碼和資源下載,鏈接:https://t.zsxq.com/0aiNxERDq onnx 模型一直是在算法部署中…

增量有余、后勁不足,星途汽車10月份銷量環比下降3.9%

撰稿|行星 來源|貝多財經 近日&#xff0c;奇瑞集團發布了10月銷量月報。報告顯示&#xff0c;奇瑞集團于2023年10月銷售汽車20.03萬輛&#xff0c;同比增長50.8%&#xff0c;單月銷量首次突破20萬輛&#xff1b;2023年前10個月的累計銷量為145.36輛&#xff0c;同比增長41.6…

C語言運算符詳解

詳細介紹了C語言表達式、算術運算符、賦值運算符、關系運算符、條件結構、邏輯運算符、位運算符的語法和使用方法&#xff0c;并討論了運算符的優先級。 1、表達式與算術運算符 在C語言中&#xff0c;表達式是一個類似數學中的算式&#xff0c;表達式由變量、字面值、常量、運…

【坑】JDK21虛擬線程不支持run方法

【坑】JDK21虛擬線程不支持run方法 run // do nothing java.lang.VirtualThread Overridepublic void start() {start(ThreadContainers.root());}Overridepublic void run() {// do nothing}

vue的模板編譯

Vue如何進行模板編譯 Vue 模板編譯是 Vue.js 在運行時將模板字符串轉換為渲染函數的過程。Vue 模板編譯分為兩個主要步驟&#xff1a; 模板解析&#xff1a; Vue 編譯器將模板字符串解析成一個抽象語法樹&#xff08;AST&#xff0c;Abstract Syntax Tree&#xff09;。AST 是…

2023年,人工智能在醫療行業領域的應用場景

本期行業洞察將帶領大家了解人工智能在醫療行業領域的應用&#xff0c;主要了解在患者治療和運營中的應用、人工智能作為預防工具以及大型醫院目前如何使用人工智能。未來的智慧醫療時代已經悄然到來。 人工智能在患者治療和機構運營中的應用 人工智能有望徹底改變醫療護理的…

csapp archlab part 1

part A [rootedb3963640a6 misc]#./yas sum.ys [rootedb3963640a6 misc]# ./yis sum.yo./yas 和 ./yis 是匯編語言編譯器和模擬器的命令行工具。 ./yas 是一個匯編語言編譯器&#xff0c;它將匯編語言代碼轉換為可執行的二進制文件。./yas sum.ys 將sum.ys文件編譯成了sum.yo可…

Mysql 中如何導入數據?

文章目錄 前言使用 LOAD DATA 導入數據使用 mysqlimport 導入數據mysqlimport的常用選項介紹后言 前言 hello world歡迎來到前端的新世界 &#x1f61c;當前文章系列專欄&#xff1a;Mysql &#x1f431;?&#x1f453;博主在前端領域還有很多知識和技術需要掌握&#xff0c;正…

計算機畢業設計項目選題推薦(免費領源碼)Java+ssm+MYSQL酒店大數據資源管理系統的設計與實現02029

摘要 信息化社會內需要與之針對性的信息獲取途徑&#xff0c;但是途徑的擴展基本上為人們所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人們經常能夠獲得不同類型信息&#xff0c;這也是技術最為難以攻克的課題。針對酒店大數據資源管理系統等問題&#xff0c;對…