[leetcode] Frog Jump

題目地址
A frog is crossing a river. The river is divided into x units and at each unit there may or may not exist a stone. The frog can jump on a stone, but it must not jump into the water.
Given a list of stones' positions (in units) in sorted ascending order, determine if the frog is able to cross the river by landing on the last stone. Initially, the frog is on the first stone and assume the first jump must be 1 unit.
If the frog's last jump was k units, then its next jump must be either k - 1, k, or k + 1 units. Note that the frog can only jump in the forward direction.

題目大意:
青蛙一次跳多少由上一次跳多少決定,上一次跳了k步,那么這次可以跳k-1,k,k+1這么多饿幅。從0開始肋殴,第一次只能跳一步芽死,問能否調(diào)到最后一個石頭上面霸旗。

明顯的dp題圣絮,我們用f[i][j]表示到第i個時候草穆,跳j步是否可以達到蜈项。那么明顯的
f[i][j] =f[k][j-1] || f[k][j] || f[k][j+1]
其中j是i和k的間隙,既 j = stones[i] - stones[k]
還有個問題续挟,我也是交了一次才返現(xiàn)紧卒,數(shù)據(jù)是[0, 2^31-1]
按我們的做法明顯就Runtime Error啦,其實這里j有個上限诗祸,假如我們有n個石頭跑芳,那么有n-1個間隙,第一次是1步直颅,然后每次+1博个,也就是
1,2,3,4,5,n-1
其實最多一次就跳n-1嘛,如果有間隙大于n-1那肯定是沒結(jié)果的功偿,我們就無視它吧盆佣。

class Solution {
public:
    bool canCross(vector<int>& stones) {
        if (stones.size() == 0) return true;
        vector<vector<bool>> f(stones.size(), vector<bool>(stones.size(), false));
        
        f[0][0] = true;
        
        for (int i = 1; i < stones.size(); i++) {
            for (int j = 0; j < i; j++) {
                int k = stones[i] - stones[j];
                if (k >= stones.size()) continue;
                f[i][k] = f[j][k];
                if (k - 1 >= 0) f[i][k] = f[i][k] || f[j][k - 1];
                if (k + 1 < stones.size()) f[i][k] = f[i][k] || f[j][k + 1];
            }
        }
        bool ans = false;
        for (int i = 0; i < stones.size(); i++) {
            ans = ans || f[stones.size() - 1][i];
        }
        return ans;
    }
};

提交了上面的代碼第一次運氣好就過了,然后第二次就TLE械荷,其實還有個優(yōu)化的地方共耍,就是每次j循環(huán)并不用從0開始,可以用二分找到第一個讓這個間隙小于等于n-1的地方
我們加上二分吨瞎,雖然時間上沒喲快多少痹兜,但是保證了不會偶爾TLE了,每次都能AC

class Solution {
public:
    bool canCross(vector<int>& stones) {
        if (stones.size() == 0) return true;
        vector<vector<bool>> f(stones.size(), vector<bool>(stones.size(), false));
        
        f[0][0] = true;
        
        for (int i = 1; i < stones.size(); i++) {
            int l = 0;
            int r = i - 1;
            while (l <= r) {
                int mid = l + (r - l) / 2;
                if (stones[i] - stones[mid] < stones.size()) r = mid - 1;
                else l = mid + 1;
            }
            for (int j = l; j < i; j++) {
                int k = stones[i] - stones[j];
                if (k >= stones.size()) continue;
                f[i][k] = f[j][k];
                if (k - 1 >= 0) f[i][k] = f[i][k] || f[j][k - 1];
                if (k + 1 < stones.size()) f[i][k] = f[i][k] || f[j][k + 1];
            }
        }
        bool ans = false;
        for (int i = 0; i < stones.size(); i++) {
            ans = ans || f[stones.size() - 1][i];
        }
        return ans;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颤诀,一起剝皮案震驚了整個濱河市字旭,隨后出現(xiàn)的幾起案子对湃,更是在濱河造成了極大的恐慌,老刑警劉巖遗淳,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拍柒,死亡現(xiàn)場離奇詭異,居然都是意外死亡屈暗,警方通過查閱死者的電腦和手機拆讯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恐锦,“玉大人往果,你說我怎么就攤上這事瘪匿〕砸ィ” “怎么了锰瘸?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵孕似,是天一觀的道長仙蛉。 經(jīng)常有香客問我盒使,道長捣作,這世上最難降的妖魔是什么衣摩? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任卜录,我火速辦了婚禮戈擒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艰毒。我一直安慰自己筐高,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布丑瞧。 她就那樣靜靜地躺著柑土,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绊汹。 梳的紋絲不亂的頭發(fā)上稽屏,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音西乖,去河邊找鬼狐榔。 笑死,一個胖子當(dāng)著我的面吹牛获雕,可吹牛的內(nèi)容都是我干的薄腻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼典鸡,長吁一口氣:“原來是場噩夢啊……” “哼被廓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起萝玷,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嫁乘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后球碉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜓斧,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年睁冬,在試婚紗的時候發(fā)現(xiàn)自己被綠了挎春。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡豆拨,死狀恐怖直奋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情施禾,我是刑警寧澤脚线,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站弥搞,受9級特大地震影響邮绿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攀例,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一船逮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧粤铭,春花似錦挖胃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至加袋,卻和暖如春凛辣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背职烧。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工扁誓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚀之。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓蝗敢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親足删。 傳聞我的和親對象是個殘疾皇子寿谴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,744評論 0 33
  • KCV 其實由于ObjC的語言特性失受,你根部不必進行任何操作就可以進行屬性的動態(tài)讀寫讶泰,這種方式就是Key Value...
    TYM閱讀 1,059評論 0 4
  • 文/小耿同學(xué) 深夜咏瑟,第三次約飯,有人走了痪署,有人還在码泞,不變的是我們四個。初識狼犯,還是在飯桌上余寥。我很清楚的記得那時候的尷...
    孤人與貓閱讀 267評論 2 1