55. Jump Game

Given an array of non-negative integers, you are initially positioned at the first index of the array.
Each element in the array represents your maximum jump length at that position.
Determine if you are able to reach the last index.

For example:
A = [2,3,1,1,4], return true.
A = [3,2,1,0,4], return false.
給定一個數(shù)組姜挺,每個元素代表當前索引位置勤揩,你能跳躍的距離,問從0索引位置開始溜徙,你是否能跳到最后一個元素。

一犀填、暴力解法蠢壹,深度優(yōu)先搜索的思路,即嘗試從位置0開始的所有跳法九巡,但是這種方法有很多的重復(fù)計算图贸,比如有n種方法都能跳到第i個位置,這個方法的時間復(fù)雜度是指數(shù)級別冕广。

public boolean canJump1(int[] nums) {
    if (nums == null || nums.length <= 1) {
        return true;
    }

    return helper(nums, 0);
}

public boolean helper(int[] nums, int index) {
    if (index == nums.length - 1) {
        return true;
    }

    int maxJump = nums[index];
    for (int i = index + 1; i <= index + maxJump; i++) {
        if (helper(nums, i)) {
            return true;
        }
    }

    return false;
}

二疏日、動態(tài)規(guī)劃,對于每個位置i來說撒汉,如果它前面某個位置j可以被跳達并且這個位置的value大于等于i-j沟优,那么i也是可以被跳達的。所以對于位置i來說神凑,可以遍歷i前面的所有位置净神,只要有一個位置滿足上面的條件何吝,位置i就是可以跳到的。下面是代碼鹃唯,時間復(fù)雜度是n方爱榕,很可惜,leetcode居然提示超時坡慌。

public boolean canJump(int[] nums) {
    if (nums == null || nums.length <= 1) {
        return true;
    }
    
    int n = nums.length;
    boolean[] dp = new boolean[n];
    dp[0] = true;
    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (dp[j] && nums[j] >= i - j) {
                dp[i] = true;
                break;
            }
        }
    }
    
    return dp[n - 1];
}

三黔酥、貪心算法,貪心我覺得挺難想的洪橘,因為每道題貪心的思路都不一樣跪者,下面就僅展示一下代碼吧。思路就是維持一個lastPos熄求,如果前面某個點能跳到lastPos渣玲,就把lastPos更新為這個點,最后看lastPos是否是0弟晚,時間復(fù)雜度是n忘衍。

public boolean canJump(int[] nums) {
    if (nums == null || nums.length <= 1) {
        return true;
    }
    
    int lastPos = nums.length - 1;
    for (int i = nums.length - 2; i >= 0; i--) {
        if (nums[i] + i >= lastPos) {
            lastPos = i;
        }
    }
    
    return lastPos == 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市卿城,隨后出現(xiàn)的幾起案子枚钓,更是在濱河造成了極大的恐慌,老刑警劉巖瑟押,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搀捷,死亡現(xiàn)場離奇詭異,居然都是意外死亡多望,警方通過查閱死者的電腦和手機嫩舟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來便斥,“玉大人至壤,你說我怎么就攤上這事∈嗑溃” “怎么了像街?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晋渺。 經(jīng)常有香客問我镰绎,道長,這世上最難降的妖魔是什么木西? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任畴栖,我火速辦了婚禮,結(jié)果婚禮上八千,老公的妹妹穿的比我還像新娘吗讶。我一直安慰自己燎猛,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布照皆。 她就那樣靜靜地躺著重绷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪膜毁。 梳的紋絲不亂的頭發(fā)上昭卓,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音瘟滨,去河邊找鬼候醒。 笑死,一個胖子當著我的面吹牛杂瘸,可吹牛的內(nèi)容都是我干的倒淫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼胧沫,長吁一口氣:“原來是場噩夢啊……” “哼昌简!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绒怨,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谦疾,沒想到半個月后南蹂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡念恍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年六剥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峰伙。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡疗疟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瞳氓,到底是詐尸還是另有隱情策彤,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布匣摘,位于F島的核電站店诗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏音榜。R本人自食惡果不足惜庞瘸,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赠叼。 院中可真熱鬧擦囊,春花似錦违霞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泌类,卻和暖如春癞谒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刃榨。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工弹砚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枢希。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓桌吃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苞轿。 傳聞我的和親對象是個殘疾皇子茅诱,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

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