Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static int truckTour(int[][] petrolpumps) {
- ArrayDeque<Integer> amount = new ArrayDeque<>(petrolpumps.length);//amount off given petrol
- ArrayDeque<Integer> dist = new ArrayDeque<>(petrolpumps.length);//distance between two pump
- /**
- * indexes off element order change in the same order(Same phase) in all times
- * ...so we can get the index off the start pump in any time
- */
- ArrayDeque<Integer> indexs = new ArrayDeque<>(petrolpumps.length);//index off pump
- fill(petrolpumps, amount, dist, indexs);
- int minIndex = dist.size();
- for (int i = 0; i < amount.size(); i++) {
- //remain petrol after consumption due to distance ..the remain may be consumpted in next distance
- int remainpetrol = 0;
- amount.add(amount.poll());
- dist.add(dist.poll());
- indexs.add(indexs.poll());
- Object a[] = amount.toArray();
- Object b[] = dist.toArray();
- boolean state = true;
- for (int j = 0; j < a.length && state; j++) {
- remainpetrol += (Integer) a[j] - (Integer) b[j];
- if (remainpetrol >= 0)
- state = true;
- else
- state = false;
- }
- if (state && indexs.peek() <= minIndex)
- minIndex = indexs.peek();
- }
- return minIndex;
- }
- private static void fill(int[][] p, ArrayDeque<Integer> amount, ArrayDeque<Integer> dist,
- ArrayDeque<Integer> indexs) {
- for (int i = 0; i < p.length; i++) {
- indexs.add(i);
- amount.add(p[i][0]);
- dist.add(p[i][1]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement