国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【每日一題 | 動態(tài)規(guī)劃】訪問完所有房間的第一天

這篇具有很好參考價(jià)值的文章主要介紹了【每日一題 | 動態(tài)規(guī)劃】訪問完所有房間的第一天。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Tag

【動態(tài)規(guī)劃】【數(shù)組】【2024-03-28】


題目來源

1997. 訪問完所有房間的第一天

訪問完所有房間的第一天,LeetCode每日一題,動態(tài)規(guī)劃,數(shù)組,C++,2024-03-28

解題思路

方法一:動態(tài)規(guī)劃

定義狀態(tài)

定義 f[i] 表示第一次到達(dá)房間 i 的日期編號。

根據(jù)題意,首次(第 1 次)訪問房間 i 時(shí),因?yàn)?1 是計(jì)數(shù),所以下一次一定會訪問房間 j = nextVisit[i]。只有訪問次數(shù)達(dá)到偶數(shù)才能訪問右邊的下一個(gè)房間,所以在第一次訪問 i 房間時(shí),我們一定訪問了偶數(shù)次(2次)i 左邊的房間。

換言之,第一次到達(dá)房間 i 時(shí),[0, ..., i-1] 房間均被訪問了,所以答案直接返回 f[n-1] 即可。

轉(zhuǎn)移關(guān)系

第一次到達(dá)房間 i 是由第二次到達(dá)房間 i-1 遞推得到的。第一次到達(dá)房間 i-1 的日期編號為 f[i-1],這時(shí)候需要花費(fèi)一天的時(shí)間回退到房間 nextVisit[i-1] (因?yàn)榉块g i-1 是第一次訪問)。

此時(shí),房間 nextVisit[i-1] 的訪問次數(shù)為奇數(shù),我們需要從該房間走(訪問)到房間 i-1,花費(fèi)時(shí)間為 f[i-1] - f[nextVisit[i-1]]。這時(shí)房間 i-1 被訪問了偶數(shù)次,可以直接耗時(shí)一天走到房間 i。于是有轉(zhuǎn)移關(guān)系:

f [ i ] = f [ i ? 1 ] + 1 + f [ i ? 1 ] ? f [ n e x t V i s i t [ i ? 1 ] ] + 1 = 2 ? f [ n ? 1 ] ? f [ n e x t V i s i t [ i ? 1 ] ] + 2 f[i] = f[i-1] + 1 + f[i-1] - f[nextVisit[i-1]] + 1 \\= 2*f[n-1] - f[nextVisit[i-1]] + 2 f[i]=f[i?1]+1+f[i?1]?f[nextVisit[i?1]]+1=2?f[n?1]?f[nextVisit[i?1]]+2

base case

初始狀態(tài)為 f[0] = 0,表示第一次訪問房間 0 的日期為 0。

實(shí)現(xiàn)代碼

class Solution {
public:
    int firstDayBeenInAllRooms(vector<int>& nextVisit) {
        int n = nextVisit.size();
        vector<long long> f(n);
        const int MOD = 1e9 + 7;
        for (int i = 1; i < n; ++i) {
            f[i] = (2 * f[i-1] - f[nextVisit[i-1]] + 2 + MOD) % MOD;
        }
        return f[n-1];
    }
};

復(fù)雜度分析

時(shí)間復(fù)雜度: O ( n ) O(n) O(n), n n n 為數(shù)組 nextVisit 的長度。

空間復(fù)雜度: O ( n ) O(n) O(n)。


寫在最后

如果您發(fā)現(xiàn)文章有任何錯(cuò)誤或者對文章有任何疑問,歡迎私信博主或者在評論區(qū)指出 ??????。

如果大家有更優(yōu)的時(shí)間、空間復(fù)雜度的方法,歡迎評論區(qū)交流。

最后,感謝您的閱讀,如果有所收獲的話可以給我點(diǎn)一個(gè) ?? 哦。文章來源地址http://www.zghlxwxcb.cn/news/detail-852933.html

到了這里,關(guān)于【每日一題 | 動態(tài)規(guī)劃】訪問完所有房間的第一天的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ( 動態(tài)規(guī)劃) 516. 最長回文子序列 ——【Leetcode每日一題】

    ( 動態(tài)規(guī)劃) 516. 最長回文子序列 ——【Leetcode每日一題】

    難度:中等 給你一個(gè)字符串 s ,找出其中最長的回文子序列,并返回該序列的長度。 子序列定義為:不改變剩余字符順序的情況下,刪除某些字符或者不刪除任何字符形成的一個(gè)序列。 示例 1: 輸入:s = “bbbab” 輸出:4 解釋:一個(gè)可能的最長回文子序列為 “bbbb” 。 示例

    2024年02月06日
    瀏覽(29)
  • ( 動態(tài)規(guī)劃) 1035. 不相交的線 ——【Leetcode每日一題】

    ( 動態(tài)規(guī)劃) 1035. 不相交的線 ——【Leetcode每日一題】

    難度:中等 在兩條獨(dú)立的水平線上按給定的順序?qū)懴?nums1 和 nums2 中的整數(shù)。 現(xiàn)在,可以繪制一些連接兩個(gè)數(shù)字 nums1[i] 和 nums2[j] 的直線,這些直線需要同時(shí)滿足滿足: nums1[i] == nums2[j] 且繪制的直線不與任何其他連線(非水平線)相交。 請注意,連線即使在端點(diǎn)也不能相交

    2024年02月05日
    瀏覽(27)
  • 羅勇軍 →《算法競賽·快沖300題》每日一題:“乘積” ← 動態(tài)規(guī)劃

    【題目來源】 http://oj.ecustacm.cn/problem.php?id=1781 http://oj.ecustacm.cn/viewnews.php?id=1023 【題目描述】 給你一個(gè)長度為 n 的序列,序列中的元素只包括 1 和 -1。 請問有多少個(gè)連續(xù)的子序列乘積為正數(shù)。 【輸入格式】 輸入第一行為正整數(shù) n。(n不超過10^6) 第二行包含 n 個(gè)整數(shù)。 【輸

    2024年02月11日
    瀏覽(19)
  • [Week 19]每日一題(C++,數(shù)學(xué),并查集,動態(tài)規(guī)劃)

    [Week 19]每日一題(C++,數(shù)學(xué),并查集,動態(tài)規(guī)劃)

    目錄 [Daimayuan] T1 倒數(shù)第n個(gè)字符串(C++,進(jìn)制) 輸入格式 輸出格式 樣例輸入 樣例輸出 解題思路 [Daimayuan] T2 排隊(duì)(C++,并查集) 輸入格式 輸出格式 樣例輸入1 樣例輸出1 樣例輸入2 樣例輸出2 樣例輸入3 樣例輸出3 數(shù)據(jù)規(guī)模 解題思路 [Daimayuan] T3 素?cái)?shù)之歡(C++,BFS) 數(shù)據(jù)規(guī)模

    2024年02月02日
    瀏覽(27)
  • [Week 18] 每日一題(C++,動態(tài)規(guī)劃,線段樹,數(shù)學(xué))

    目錄 [Daimayuan] T1 最長公共子序列(C++,DP,二分) 輸入格式 輸出格式 數(shù)據(jù)范圍 輸入樣例 輸出樣例 解題思路 [Daimayuan] T2 喵喵序列(C++,序偶) 題目描述 輸入格式 輸出格式 樣例輸入 樣例輸出 樣例說明 數(shù)據(jù)范圍 雙倍經(jīng)驗(yàn) 解題思路: [Daimayuan] T3 漂亮數(shù)(C++,字符串) 輸入

    2023年04月24日
    瀏覽(14)
  • (動態(tài)規(guī)劃) 132. 分割回文串 II ——【Leetcode每日一題】

    (動態(tài)規(guī)劃) 132. 分割回文串 II ——【Leetcode每日一題】

    難度:困難 給你一個(gè)字符串 s ,請你將 s 分割成一些子串,使每個(gè)子串都是回文。 返回符合要求的 最少分割次數(shù) 。 示例 1: 輸入:s = “aab” 輸出:1 解釋:只需一次分割就可將 s 分割成 [“aa”,“b”] 這樣兩個(gè)回文子串。 示例 2: 輸入:s = “a” 輸出:0 示例 3: 輸入:

    2024年02月15日
    瀏覽(43)
  • 【每日一題】ABC248C - Dice Sum | 動態(tài)規(guī)劃 |簡單

    原題鏈接 構(gòu)造一個(gè)長度為 n n n 的整數(shù)數(shù)組 a a a ,滿足如下兩個(gè)條件: 1 ≤ a i ≤ m 1leq a_ileq m 1 ≤ a i ? ≤ m ∑ a i ≤ k sum a_ileq k ∑ a i ? ≤ k 問可以構(gòu)造出多少種不同的數(shù)組 a a a 。 1 ≤ n , m ≤ 50 1leq n,mleq 50 1 ≤ n , m ≤ 50 n ≤ k ≤ n × m nleq kleq ntimes m n ≤ k ≤ n × m

    2024年02月09日
    瀏覽(28)
  • (動態(tài)規(guī)劃) 劍指 Offer 60. n個(gè)骰子的點(diǎn)數(shù) ——【Leetcode每日一題】

    (動態(tài)規(guī)劃) 劍指 Offer 60. n個(gè)骰子的點(diǎn)數(shù) ——【Leetcode每日一題】

    難度:中等 把 n 個(gè)骰子扔在地上,所有骰子朝上一面的點(diǎn)數(shù)之和為 s 。輸入 n ,打印出s的所有可能的值出現(xiàn)的概率。 你需要用一個(gè)浮點(diǎn)數(shù)數(shù)組返回答案,其中第 i 個(gè)元素代表這 n 個(gè)骰子所能擲出的點(diǎn)數(shù)集合中第 i 小的那個(gè)的概率。 示例 1: 輸入: 1 輸出: [0.16667,0.16667,0.16667,

    2024年02月11日
    瀏覽(19)
  • 【每日一題Day208】LC1335工作計(jì)劃的最低難度 | 動態(tài)規(guī)劃

    工作計(jì)劃的最低難度【LC1335】 你需要制定一份 d 天的工作計(jì)劃表。工作之間存在依賴,要想執(zhí)行第 i 項(xiàng)工作,你必須完成全部 j 項(xiàng)工作( 0 = j i )。 你每天 至少 需要完成一項(xiàng)任務(wù)。工作計(jì)劃的總難度是這 d 天每一天的難度之和,而一天的工作難度是當(dāng)天應(yīng)該完成工作的最大

    2024年02月05日
    瀏覽(28)
  • (動態(tài)規(guī)劃) 劍指 Offer 42. 連續(xù)子數(shù)組的最大和 ——【Leetcode每日一題】

    (動態(tài)規(guī)劃) 劍指 Offer 42. 連續(xù)子數(shù)組的最大和 ——【Leetcode每日一題】

    難度:簡單 輸入一個(gè)整型數(shù)組,數(shù)組中的一個(gè)或連續(xù)多個(gè)整數(shù)組成一個(gè)子數(shù)組。求所有子數(shù)組的和的最大值。 要求時(shí)間復(fù)雜度為 O(n) 。 示例1: 輸入: nums = [-2,1,-3,4,-1,2,1,-5,4] 輸出: 6 解釋: 連續(xù)子數(shù)組 [4,-1,2,1] 的和最大,為 6。 提示 : 1 = a r r . l e n g t h = 1 0 5 1 = arr.length = 10^

    2024年02月11日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包