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

算法leetcode|45. 跳躍游戲 II(rust重拳出擊)

這篇具有很好參考價(jià)值的文章主要介紹了算法leetcode|45. 跳躍游戲 II(rust重拳出擊)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。



45. 跳躍游戲 II:

給定一個長度為 n0 索引整數(shù)數(shù)組 nums。初始位置為 nums[0]。

每個元素 nums[i] 表示從索引 i 向前跳轉(zhuǎn)的最大長度。換句話說,如果你在 nums[i] 處,你可以跳轉(zhuǎn)到任意 nums[i + j] 處:

  • 0 <= j <= nums[i]
  • i + j < n

返回到達(dá) nums[n - 1]最小跳躍次數(shù)。生成的測試用例可以到達(dá) nums[n - 1]。

樣例 1:

輸入: 

	nums = [2,3,1,1,4]
	
輸出: 

	2
	
解釋: 

	跳到最后一個位置的最小跳躍數(shù)是 2。
    從下標(biāo)為 0 跳到下標(biāo)為 1 的位置,跳 1 步,然后跳 3 步到達(dá)數(shù)組的最后一個位置。

樣例 2:

輸入: 

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

	2

提示:

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

分析:

  • 面對這道算法題目,二當(dāng)家的再次陷入了沉思。
  • 看到提示說保證有解,就想到逆向查找出發(fā)位置,由終點(diǎn)回起點(diǎn),但是很慢。
  • 看題目是讓找最優(yōu)解,又想到用動態(tài)規(guī)劃,但是效率依然不夠好。
  • 再看題目說每個數(shù)字表示的是跳躍的最大長度,而不是固定長度,這時(shí)候就想到了使用貪心,先在當(dāng)前能到達(dá)的范圍內(nèi)選能跳到最遠(yuǎn)的位置作為下一跳,這樣就保證了下一步的可選位置最多,但下一步我不一定非得跳固定長度,完全可以跳的近,它包含了跳的近的位置,依次再從中選能挑到最遠(yuǎn)的位置,走一步說一步,局部選最優(yōu),貪心,太貪心了。
  • 在循環(huán)遍歷時(shí),由于到達(dá)最后一個位置之后不需要再次跳躍,所以應(yīng)該比通常的遍歷要少一次循環(huán),最后一個位置的數(shù)字是沒有用處的,能到就可以了,而不需要再跳躍。

算法leetcode|45. 跳躍游戲 II(rust重拳出擊)


題解:

rust

impl Solution {
    pub fn jump(nums: Vec<i32>) -> i32 {
        let (mut maxPos, mut end, mut steps) = (0, 0, 0);
        (0..nums.len() - 1).for_each(|i| {
            maxPos = maxPos.max(i + nums[i] as usize);
            if i == end {
                end = maxPos;
                steps += 1;
            }
        });
        return steps;
    }
}

go

func jump(nums []int) int {
    l := len(nums)
	maxPos, end, steps := 0, 0, 0
	for i := 0; i < l-1; i++ {
		if maxPos < i+nums[i] {
			maxPos = i + nums[i]
		}
		if i == end {
			end = maxPos
			steps++
		}

	}
	return steps
}

c++

class Solution {
public:
    int jump(vector<int>& nums) {
        int n = nums.size(), maxPos = 0, end = 0, step = 0;
        for (int i = 0; i < n - 1; ++i) {
            maxPos = max(maxPos, i + nums[i]);
            if (i == end) {
                end = maxPos;
                ++step;
            }
        }
        return step;
    }
};

c

int jump(int* nums, int numsSize){
    int maxPos = 0, end = 0, step = 0;
    for (int i = 0; i < numsSize - 1; ++i) {
        maxPos = fmax(maxPos, i + nums[i]);
        if (i == end) {
            end = maxPos;
            ++step;
        }
    }
    return step;
}

python

class Solution:
    def jump(self, nums: List[int]) -> int:
        n = len(nums)
        max_pos, end, step = 0, 0, 0
        for i in range(n - 1):
            max_pos = max(max_pos, i + nums[i])
            if i == end:
                end = max_pos
                step += 1
        return step


java

class Solution {
    public int jump(int[] nums) {
        int maxPos = 0, end = 0, steps = 0;
        for (int i = 0; i < nums.length - 1; ++i) {
            maxPos = Math.max(maxPos, i + nums[i]);
            if (i == end) {
                end = maxPos;
                ++steps;
            }
        }
        return steps;
    }
}

非常感謝你閱讀本文~
歡迎【點(diǎn)贊】【收藏】【評論】~
放棄不難,但堅(jiān)持一定很酷~
希望我們大家都能每天進(jìn)步一點(diǎn)點(diǎn)~
本文由 二當(dāng)家的白帽子:https://le-yi.blog.csdn.net/ 博客原創(chuàng)~文章來源地址http://www.zghlxwxcb.cn/news/detail-413649.html


到了這里,關(guān)于算法leetcode|45. 跳躍游戲 II(rust重拳出擊)的文章就介紹完了。如果您還想了解更多內(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)文章

  • 算法leetcode|63. 不同路徑 II(rust重拳出擊)

    算法leetcode|63. 不同路徑 II(rust重拳出擊)

    一個機(jī)器人位于一個 m x n 網(wǎng)格的左上角 (起始點(diǎn)在下圖中標(biāo)記為 “Start” )。 機(jī)器人每次只能向下或者向右移動一步。機(jī)器人試圖達(dá)到網(wǎng)格的右下角(在下圖中標(biāo)記為 “Finish”)。 現(xiàn)在考慮網(wǎng)格中有障礙物。那么從左上角到右下角將會有多少條不同的路徑? 網(wǎng)格中的障礙

    2024年02月16日
    瀏覽(28)
  • 算法leetcode|92. 反轉(zhuǎn)鏈表 II(rust重拳出擊)

    算法leetcode|92. 反轉(zhuǎn)鏈表 II(rust重拳出擊)

    給你單鏈表的頭指針 head 和兩個整數(shù) left 和 right ,其中 left = right 。請你反轉(zhuǎn)從位置 left 到位置 right 的鏈表節(jié)點(diǎn),返回 反轉(zhuǎn)后的鏈表 。 鏈表中節(jié)點(diǎn)數(shù)目為 n 1 = n = 500 -500 = Node.val = 500 1 = left = right = n 你可以使用一趟掃描完成反轉(zhuǎn)嗎? 將鏈表分成3部分,即前面不需要反轉(zhuǎn)的部

    2024年02月05日
    瀏覽(28)
  • 算法leetcode|81. 搜索旋轉(zhuǎn)排序數(shù)組 II(rust重拳出擊)

    算法leetcode|81. 搜索旋轉(zhuǎn)排序數(shù)組 II(rust重拳出擊)

    已知存在一個按非降序排列的整數(shù)數(shù)組 nums ,數(shù)組中的值不必互不相同。 在傳遞給函數(shù)之前, nums 在預(yù)先未知的某個下標(biāo) k ( 0 = k nums.length )上進(jìn)行了 旋轉(zhuǎn) ,使數(shù)組變?yōu)?[nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] (下標(biāo) 從 0 開始 計(jì)數(shù))。例如, [0,1,2,4,4,4,5,6,

    2024年02月07日
    瀏覽(22)
  • 算法leetcode|80. 刪除有序數(shù)組中的重復(fù)項(xiàng) II(rust重拳出擊)

    給你一個有序數(shù)組 nums ,請你 原地 刪除重復(fù)出現(xiàn)的元素,使得出現(xiàn)次數(shù)超過兩次的元素只出現(xiàn)兩次 ,返回刪除后數(shù)組的新長度。 不要使用額外的數(shù)組空間,你必須在 原地 修改輸入數(shù)組 并在使用 O(1) 額外空間的條件下完成。 說明 : 為什么返回?cái)?shù)值是整數(shù),但輸出的答案是

    2024年02月09日
    瀏覽(33)
  • 算法leetcode|82. 刪除排序鏈表中的重復(fù)元素 II(rust重拳出擊)

    算法leetcode|82. 刪除排序鏈表中的重復(fù)元素 II(rust重拳出擊)

    給定一個已排序的鏈表的頭 head , 刪除原始鏈表中所有重復(fù)數(shù)字的節(jié)點(diǎn),只留下不同的數(shù)字 。返回 已排序的鏈表 。 鏈表中節(jié)點(diǎn)數(shù)目在范圍 [0, 300] 內(nèi) -100 = Node.val = 100 題目數(shù)據(jù)保證鏈表已經(jīng)按升序 排列 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 這道題目和 83. 刪除排序

    2024年02月08日
    瀏覽(26)
  • leetcode 45. 跳躍游戲 II

    ? ? ? ? ?本題為?跳躍游戲I?的升級版,保證可以到達(dá)終點(diǎn)的情況下,要求出最短的跳躍次數(shù)。 ? ? ? ? 還是仿照 跳躍游戲I 的思路,定義一個cover用于記錄最大覆蓋范圍,終止條件是:? ? ? ? cover = nums.size()-1? ?,還要定義一個變量 largest 用于記錄當(dāng)前最遠(yuǎn)覆蓋范圍的下

    2024年02月14日
    瀏覽(21)
  • 算法leetcode|66. 加一(rust重拳出擊)

    給定一個由 整數(shù) 組成的 非空 數(shù)組所表示的非負(fù)整數(shù),在該數(shù)的基礎(chǔ)上加一。 最高位數(shù)字存放在數(shù)組的首位, 數(shù)組中每個元素只存儲 單個 數(shù)字。 你可以假設(shè)除了整數(shù) 0 之外,這個整數(shù)不會以零開頭。 1 = digits.length = 100 0 = digits[i] = 9 面對這道算法題目,二當(dāng)家的再次陷入了

    2024年02月14日
    瀏覽(23)
  • 算法leetcode|57. 插入?yún)^(qū)間(rust重拳出擊)

    給你一個 無重疊的 ,按照區(qū)間起始端點(diǎn)排序的區(qū)間列表。 在列表中插入一個新的區(qū)間,你需要確保列表中的區(qū)間仍然有序且不重疊(如果有必要的話,可以合并區(qū)間)。 0 = intervals.length = 10 4 intervals[i].length == 2 0 = intervals[i][0] = intervals[i][1] = 10 5 intervals 根據(jù) intervals[i][0] 按

    2024年02月09日
    瀏覽(24)
  • 算法leetcode|79. 單詞搜索(rust重拳出擊)

    算法leetcode|79. 單詞搜索(rust重拳出擊)

    給定一個 m x n 二維字符網(wǎng)格 board 和一個字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過相鄰的單元格內(nèi)的字母構(gòu)成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內(nèi)的字母不允許被重復(fù)使用。

    2024年02月09日
    瀏覽(20)
  • 算法leetcode|60. 排列序列(rust重拳出擊)

    給出集合 [1,2,3,...,n] ,其所有元素共有 n! 種排列。 按大小順序列出所有排列情況,并一一標(biāo)記,當(dāng) n = 3 時(shí), 所有排列如下: \\\"123\\\" \\\"132\\\" \\\"213\\\" \\\"231\\\" \\\"312\\\" \\\"321\\\" 給定 n 和 k ,返回第 k 個排列。 1 = n = 9 1 = k = n! 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 如果模擬,按順序生成k個

    2024年02月12日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包