45. Jump Game II

来源:互联网 发布:在淘宝上搜血滴子 编辑:程序博客网 时间:2024/06/07 17:39

1刷
一开始直接用dp超时了,想了想就用贪心优先队列过了!!!!

记得优先队列怎样写!!!
Priority——queue
!!!!

class Solution {public:    struct node{        int now;        int num;        friend bool operator < (node a, node b){            if(a.num == b.num)                return a.now > b.now;            else                return a.num < b.num;        }    };    int jump(vector<int>& nums) {        if(nums.size() == 1) return 0;        priority_queue<node>qu;        int n = 1;        int now = 0;        while(now + nums[now] < nums.size() - 1){            while(!qu.empty()) qu.pop();            for(int i = now + 1; i <= now + nums[now]; ++ i){                node t;                t.now = i;                t.num = i + nums[i];                qu.push(t);            }            node u;            u = qu.top();            n++;            now = u.now;        }        return n;    }};

2刷
1刷用了优先队列,2刷还是用贪心,有几种贪心的方法,就是写出来会有小细节的万恶提,3刷继续。

class Solution {public:    int jump(vector<int>& nums) {        if(nums.size() <= 1) return 0;        int now = 0, step = 0, maxx = 0;        for(int i = 0; i < nums.size(); ++ i){            maxx = max(maxx, nums[i] + i);            if(maxx >= nums.size() - 1){                step++;                break;            }            if(now == i){                now = maxx;                step++;            }        }        return step;    }};
0 0
原创粉丝点击