题目:跳跃游戏 II
这里直接引用一下别人的讲解:
//把该问题比喻为入职,数组下标是公司级别(入职门槛),对应的值是公司级别之上的级别成长空间。你想用最少的跳槽次数入职最高级的公司
//数组[2,3,1,2,4,2,3]
//下标 0 1 2 3 4 5 6
//最开始你没有工作,你的水平是2级,可以在2级及以下的公司里随便挑,此时候选公司有下标1和2
//注意:如果你想进入更高级别的公司,应该选择能够帮助你提升级别最多的公司。例如,公司1能够将你的级别提升到1+3=4级,而公司2只能提升到2+1=3级。显然,你应该选择公司1,然后升到4级。接下来,你可以跳槽到4级及以下的公司,每次都选择能够帮助你提升最多级别的公司,如此循环……直到水平级别足够入职梦中情司
//只有每次跳槽都选择能够帮助你升级最多的公司,才能以最少的跳槽次数到达最高级别的公司
1int jump(vector<int>& nums)
2{
3 int res = 0;
4 int curr = 0, max_pos = 0;
5
6 for(int i = 0; i < nums.size() - 1; i++)
7 {
8 max_pos = std::max(max_pos, i + nums[i]);
9 if(i == curr)
10 {
11 curr = max_pos;
12 res++;
13 }
14 }
15 return res;
16}