2024-04-06 代碼隨想錄

代碼隨想錄算法訓(xùn)練營(yíng)day32 | 題目122掌逛、題目55拇颅、題目45


題目一描述

122. 買(mǎi)賣(mài)股票的最佳時(shí)機(jī) II

給你一個(gè)整數(shù)數(shù)組 prices ,其中 prices[i] 表示某支股票第 i 天的價(jià)格。

在每一天,你可以決定是否購(gòu)買(mǎi)和/或出售股票碍舍。你在任何時(shí)候 最多 只能持有 一股 股票。你也可以先購(gòu)買(mǎi)邑雅,然后在 同一天 出售片橡。

返回 你能獲得的 最大 利潤(rùn) 。

示例 1:
輸入:prices = [7,1,5,3,6,4]
輸出:7
解釋?zhuān)涸诘?2 天(股票價(jià)格 = 1)的時(shí)候買(mǎi)入淮野,在第 3 天(股票價(jià)格 = 5)的時(shí)候賣(mài)出, 這筆交易所能獲得利潤(rùn) = 5 - 1 = 4 捧书。
隨后吹泡,在第 4 天(股票價(jià)格 = 3)的時(shí)候買(mǎi)入,在第 5 天(股票價(jià)格 = 6)的時(shí)候賣(mài)出, 這筆交易所能獲得利潤(rùn) = 6 - 3 = 3 经瓷。
總利潤(rùn)為 4 + 3 = 7 爆哑。

示例 2:
輸入:prices = [1,2,3,4,5]
輸出:4
解釋?zhuān)涸诘?1 天(股票價(jià)格 = 1)的時(shí)候買(mǎi)入,在第 5 天 (股票價(jià)格 = 5)的時(shí)候賣(mài)出, 這筆交易所能獲得利潤(rùn) = 5 - 1 = 4 了嚎。
總利潤(rùn)為 4 。

示例 3:
輸入:prices = [7,6,4,3,1]
輸出:0
解釋?zhuān)涸谶@種情況下, 交易無(wú)法獲得正利潤(rùn)廊营,所以不參與交易可以獲得最大利潤(rùn)歪泳,最大利潤(rùn)為 0 。

提示:
1 <= prices.length <= 3 * 10^4
0 <= prices[i] <= 10^4

解題思路

每次只在后一天比前一天高的時(shí)候取差值露筒。

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

方法一:

class Solution {
    public int maxProfit(int[] prices) {
        int sum = 0;
        for (int i = 0; i < prices.length; i++) {
            if (i > 0 && prices[i] > prices[i - 1]) {
                sum += prices[i] - prices[i - 1];
            }
        }
        return sum;
    }
}

題目二描述

55. 跳躍游戲

給你一個(gè)非負(fù)整數(shù)數(shù)組 nums 呐伞,你最初位于數(shù)組的 第一個(gè)下標(biāo) 。數(shù)組中的每個(gè)元素代表你在該位置可以跳躍的最大長(zhǎng)度慎式。

判斷你是否能夠到達(dá)最后一個(gè)下標(biāo)伶氢,如果可以,返回 true 瘪吏;否則癣防,返回 false 。

示例 1:
輸入:nums = [2,3,1,1,4]
輸出:true
解釋?zhuān)嚎梢韵忍?1 步掌眠,從下標(biāo) 0 到達(dá)下標(biāo) 1, 然后再?gòu)南聵?biāo) 1 跳 3 步到達(dá)最后一個(gè)下標(biāo)蕾盯。

示例 2:
輸入:nums = [3,2,1,0,4]
輸出:false
解釋?zhuān)簾o(wú)論怎樣,總會(huì)到達(dá)下標(biāo)為 3 的位置蓝丙。但該下標(biāo)的最大跳躍長(zhǎng)度是 0 级遭, 所以永遠(yuǎn)不可能到達(dá)最后一個(gè)下標(biāo)。

提示:
1 <= nums.length <= 10^4
0 <= nums[i] <= 10^5

解題思路

可以先找到每一處0渺尘,然后往會(huì)倒推挫鸽,看能不能跳過(guò)這個(gè)0.
也可以用貪心,每次計(jì)算在本次能覆蓋到的范圍里鸥跟,新的能覆蓋的最大位置丢郊,最后判斷最大位置是不是數(shù)組最后一位。

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

方法一:

class Solution {
    public boolean canJump(int[] nums) {
        if (nums.length == 1)
            return true;
        for (int i = 0; i < nums.length - 1; i++) {
            if (nums[i] == 0) {
                if (check(nums, i - 1) == false)
                    return false;
            }
        }
        return true;
    }

    private boolean check(int[] nums, int i) {
        int n = 1;
        while (i >= 0) {
            if (nums[i] > n) {
                return true;
            }
            i--;
            n++;
        }
        return false;
    }
}

方法二:

class Solution {
    public boolean canJump(int[] nums) {
        if (nums.length == 1)
            return true;
        int maxRes = 0;
        for (int i = 0; i < nums.length - 1; i++) {
            if(maxRes < i){
                return false;
            }
            maxRes = Math.max(maxRes, nums[i] + i);
        }
        return maxRes >= nums.length - 1;
    }
}

題目三描述

45. 跳躍游戲 II

給定一個(gè)長(zhǎng)度為 n 的 0 索引整數(shù)數(shù)組 nums医咨。初始位置為 nums[0]蚂夕。

每個(gè)元素 nums[i] 表示從索引 i 向前跳轉(zhuǎn)的最大長(zhǎng)度。換句話(huà)說(shuō)腋逆,如果你在 nums[i] 處婿牍,你可以跳轉(zhuǎn)到任意 nums[i + j] 處:
0 <= j <= nums[i]
i + j < n
返回到達(dá) nums[n - 1] 的最小跳躍次數(shù)。生成的測(cè)試用例可以到達(dá) nums[n - 1]惩歉。

示例 1:
輸入: nums = [2,3,1,1,4]
輸出: 2
解釋: 跳到最后一個(gè)位置的最小跳躍數(shù)是 2等脂。
從下標(biāo)為 0 跳到下標(biāo)為 1 的位置俏蛮,跳 1 步,然后跳 3 步到達(dá)數(shù)組的最后一個(gè)位置上遥。

示例 2:
輸入: nums = [2,3,0,1,4]
輸出: 2

提示:
1 <= nums.length <= 104
0 <= nums[i] <= 1000
題目保證可以到達(dá) nums[n-1]

解題思路

每次在可達(dá)范圍內(nèi)找到新的最大的可覆蓋范圍搏屑,在i移動(dòng)到當(dāng)前可達(dá)范圍邊界時(shí),把可達(dá)范圍更新粉楚,相當(dāng)于把i移動(dòng)到每個(gè)區(qū)間里可達(dá)范圍最大的那個(gè)位置辣恋,跳躍次數(shù)加一。
實(shí)際上不用移動(dòng)i模软,只需要更新范圍即可伟骨。

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

方法一:

class Solution {
    public int jump(int[] nums) {
        if (nums.length == 1) {
            return 0;
        }
        int maxCoverRange = nums[0];
        int curCoverRange = nums[0];
        int res = 0;
        for (int i = 0; i < nums.length; i++) {
            // 如果當(dāng)前范圍可以跳到,就直接跳最后一步
            if (curCoverRange >= nums.length - 1) {
                res++;
                return res;
            }
            // 得到在curCoverRange里的最大范圍
            if (maxCoverRange < nums[i] + i) {
                maxCoverRange = nums[i] + i;
            }
            // i走到當(dāng)前范圍的最后燃异,再更新cur為新的maxCoverRange携狭,也相當(dāng)于跳一步到區(qū)間內(nèi)的那個(gè)最大值上。
            if (i == curCoverRange) {
                res++;
                // 這里其實(shí)應(yīng)該把i置于取到maxCoverRange的時(shí)候的下標(biāo)
                // 但是其實(shí)不用回俐,因?yàn)閏urRange的后面的都沒(méi)有max那里大逛腿,再算也是重復(fù)計(jì)算〗銎模可以從i繼續(xù)往后遍歷单默。
                curCoverRange = maxCoverRange;
            }
        }
        return res;
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市忘瓦,隨后出現(xiàn)的幾起案子雕凹,更是在濱河造成了極大的恐慌,老刑警劉巖政冻,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枚抵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡明场,警方通過(guò)查閱死者的電腦和手機(jī)汽摹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苦锨,“玉大人逼泣,你說(shuō)我怎么就攤上這事≈凼妫” “怎么了拉庶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秃励。 經(jīng)常有香客問(wèn)我氏仗,道長(zhǎng),這世上最難降的妖魔是什么夺鲜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任皆尔,我火速辦了婚禮呐舔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慷蠕。我一直安慰自己珊拼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布流炕。 她就那樣靜靜地躺著澎现,像睡著了一般。 火紅的嫁衣襯著肌膚如雪每辟。 梳的紋絲不亂的頭發(fā)上剑辫,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音影兽,去河邊找鬼揭斧。 笑死莱革,一個(gè)胖子當(dāng)著我的面吹牛峻堰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盅视,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼捐名,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了闹击?” 一聲冷哼從身側(cè)響起镶蹋,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赏半,沒(méi)想到半個(gè)月后贺归,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡断箫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年拂酣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仲义。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婶熬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出埃撵,到底是詐尸還是另有隱情赵颅,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布暂刘,位于F島的核電站饺谬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谣拣。R本人自食惡果不足惜商蕴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一叠萍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绪商,春花似錦苛谷、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至例书,卻和暖如春锣尉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背决采。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工自沧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人树瞭。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓拇厢,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晒喷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子孝偎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容