package com.interview.flag.f;
import java.util.LinkedList;
import java.util.Queue;
/**
* Created_By: stefanie
* Date: 15-1-7
* Time: 下午6:04
*/
public class F8_JumpOverRiver {
class Payload {
int offset, speed;
Payload(int offset, int speed) { this.offset = offset; this.speed = speed; }
}
public int minSteps(int[] A) {
if (A == null || A.length < 2) return 0;
Queue<Payload> queue = new LinkedList();
queue.offer(new Payload(0, 1));
int steps = 0;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
Payload payload = queue.poll();
int offset = payload.offset;
int speed = payload.speed;
if (offset >= A.length - 1) return steps;
else if (A[offset] == 0) continue;
else {
queue.offer(new Payload(offset + speed, speed));
queue.offer(new Payload(offset + speed + 1, speed + 1));
}
}
steps++;
}
return -1; // can't be reached.
}
public static void main(String[] args){
F8_JumpOverRiver jump = new F8_JumpOverRiver();
int[] R = new int[]{1,1,1,0,1,1,0,0};
System.out.println(jump.minSteps(R)); //3
}
}