日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

贪心:Jump Game 跳跃游戏

發布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 贪心:Jump Game 跳跃游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一個數組存儲了非負整型數據,數組中的第i個元素a[i],代表了可以從數組第i個 位置最多向前跳躍a[i]步;已知數組各元素的情況下,求是否可以從數組的第0個位置跳躍到數組的最后一個元素的位置,返回是true或者false判斷是否能夠跳躍到結尾

例如:
nums = [2, 3, 1, 1, 4] ,可以從nums[0] = 2 跳躍至 nums[4] = 4;
nums = [3, 2, 1, 0, 4] ,不可以從nums[0] = 3 跳躍至 nums[4] = 4

  1. 貪心規律:
    想要判斷最終是否能夠跳躍到終點,最快的辦法即選擇每次跳躍獲取到的跳躍范圍中最大的跳躍點;
    比如:nums = [2 3 1 1 4]
    第一次跳 為2,那么接下來可以跳一次,跳到nums[1] = 3;或者跳躍2次,nums[2] = 1
    如何選擇第二次跳呢,根據貪心算法,我們想要更快得完成任務,優先選擇能夠跳的次數最多的點,即nums[1],因為它能夠在第二次跳3次,但是nums[2]只能跳1次

    所以,貪心規律即為 每次跳躍的落點,為接下來可跳躍范圍中最大的值;站在巨人的肩膀上可以跳得更遠。

  2. 迭代策略:

    1. 求從第i位置最遠可跳至第index[i]位置: 根據從第i位置最遠可跳nums[i]步: index[i] = nums[i] + i;
    2. 初始化:
      1)設置變量jump代表當前所處的位置,初始化為0;
      2)設置變量max_index代表從第0位置至第jump位置這個過程中,最遠可到達的位置,
      初始化為index[0]。
    3. 利用jump掃描index數組,直到jump達到index數組尾部或jump超過max_index,掃描過程中, 更新max_index。
    4. 若最終jump 為數組長度,則返回true,否則返回false。

實現算法如下:

bool judge_finish(vector<int> &stage) {vector<int> index;/*構造最遠跳至的 index列表*/for (int i = 0; i < stage.size(); ++i) {index.push_back(i + stage[i]);}int max_index = stage[0];int jump = 0;/*篩選條件為要求為jump達到數組尾且 jump不能超過index數組,否則當前道路為不可達*/while(jump < index.size() && jump <= max_index) {if (max_index < index[jump]) {max_index = index[jump];}jump ++;}/*當 jump達到數組尾,即此時已經能夠走完*/if (jump == index.size()) {return true;}return false;
}

測試代碼如下:

#include <iostream>
#include <vector>using namespace std;bool judge_finish(vector<int> &stage) {vector<int> index;for (int i = 0; i < stage.size(); ++i) {index.push_back(i + stage[i]);}int max_index = stage[0];int jump = 0;while(jump < index.size() && jump <= max_index) {if (max_index < index[jump]) {max_index = index[jump];}jump ++;}if (jump == index.size()) {return true;}return false;
}int main() {vector<int> s;int tmp;cout << "input arr " <<endl;for (int i =0;i < 5; ++i) {cin >> tmp;s.push_back(tmp);}cout << "the true or false that judge the result is " << judge_finish(s) << endl;return 0;
}

輸出如下:

input arr 
3 2 2 0 5
the true or false that judge the result is 1

總結

以上是生活随笔為你收集整理的贪心:Jump Game 跳跃游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。