是的从今天开始要每天刷一道算法题,恶心也要刷!
一条袋鼠要从河这边跳到河另一边,河流很宽,但是中间打有桩子,每隔一米就有一个,每个桩子上装有一个弹簧。袋鼠跳弹簧就可以跳很远,每个弹簧的力量不同,用一个数字表示他的力量。如果数字是5,表示袋鼠跳到上面后下一跳最远可以跳5个,如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了,给定每个弹簧的力量,求袋鼠最少要多少跳才能到达对岸。如果无法到达输出-1
输入
输入分两行,第一行是数组长度N,第二行是每一项的值,用空格分隔
输出
输出最后骚的条数,无法到达输出-1
样例输入
5
2 0 1 1 1
样例输出
4
今天晚上因为时间原因呢,就只好拖上一个不完整的结果出来了!
解决方法:将数据从后面依次入栈,然后从栈顶根据栈顶数值的大小进行出栈操作。如果能够完成出栈就行了。
首先是用到js的数组模拟的栈,下面是对数组进行模拟出栈操作的函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16function Pop(arr){
var len = arr.length;
var j = 0;
for(var i = 0; i < len; ){
arr[i] = parseInt(arr[i]);
if(arr[i]!==0){
i = i + arr[i];
j++;
}else{
return -1;
}
}
if(i>=len){
return j;
}
}
上面的函数,只能执行每次都是按照弹簧最大弹力来计算。有的时候数据例如
2 3 0 1 1 1
这个时候如果第一次只跳一格时可以通过的。但是上面的算法无法通过。明天再说咯!
转眼就到了明天了呢!很激动,妈蛋这个题是真不会,没有做出来很羞愧。我们进入下一道算法->