问题:给定一个数组,数组中含有重复元素,给出两个数n1和n2,求这两个数在数组中所出现位置的最小距离。例如,数组{4,5,6,4,7,4,6,4,7,8,5,6,4,3,10,8},4和8的最小距离是2.
思路:遍历数组,会遇到两个情况,一,当遇到n1时候,记录下n1对应的数组下标的位置n1_index,通过求n1_index与上次遍历到n2的下标值n2_index的差,可以求出最近一次遍历到n2和n2的距离。二,当遇到n2时候,同样记录n2在数组位置下标n2_index,然后求n2_index与上次遍历到的n1的下标值n1_index的差,求出最近一次遍历到的n1和n2的距离。
package Array;
import java.util.*;
/**
* Created by Administrator on 2017/10/1.
* 定义一个变量min_dist记录n1,n2的最小距离,在以上两种情况下每次求出n1和n2的距离与min_dist相比,求最小值。
*/
public class Test {
public static int min(int a,int b){
return a>b?b:a;
}
public static int minDistance(int a[] ,int n1,int n2){
if(a==null){
return Integer.MIN_VALUE;
}
int len=a.length;
int n1_index=-1;
int n2_index=-1;
int min_dist=Integer.MIN_VALUE+1;
for(int i=0;i<len;i++){
if(a[i]==n1){
n1_index=i;
if(n2_index>=0){
min_dist=min(Math.abs(min_dist),Math.abs(n1_index-n2_index));}
}
if(a[i]==n2){
n2_index=i;
if(n1_index>=0){
min_dist=min(Math.abs(min_dist), Math.abs(n2_index-n1_index));
}
}
}
return min_dist;
}
public static void main(String[] args){
int a[] = {4,5,6,4,7,6,4,7,8,5,6,4,3,10,8};
System.out.println(minDistance(a,5,10));
}
}