package com.interview.flag.f;
import com.interview.utils.ConsoleWriter;
import com.interview.utils.DataGenerator;
/**
* Created_By: stefanie
* Date: 14-12-10
* Time: 下午1:00
*/
public class F6_MaxDistance {
//distance[i] = A[i] + A[k] + k - i, and distance[i+1] = A[i+1] + A[k] + k - (i + 1)
//distance[i] == max(distance[i+1] - A[i+1] + A[i] + 1, A[i] * 2);
public int maxDistance(int[] nums){
if(nums == null || nums.length < 1) return 0;
int pre = nums[nums.length - 1] * 2;
int max = pre;
for(int i = nums.length - 2; i >= 0; i--){
int distance = Math.max(nums[i] * 2, pre - nums[i + 1] + nums[i] + 1);
max = Math.max(max, distance);
pre = distance;
}
return max;
}
public int maxDistanceO2(int[] nums){
int max = Integer.MIN_VALUE;
for(int i = nums.length - 1; i >= 0; i--){
for(int j = i; j < nums.length; j++){
int distance = nums[i] + nums[j] + j - i;
max = Math.max(max, distance);
}
}
return max;
}
public static void main(String[] args){
F6_MaxDistance finder = new F6_MaxDistance();
for(int i = 0; i < 10; i++){
int[] nums = DataGenerator.generateIntArray(10, false);
ConsoleWriter.printIntArray(nums);
System.out.println(finder.maxDistanceO2(nums));
System.out.println(finder.maxDistance(nums));
}
}
}