问题描述:
一个数组,含有重复元素,给出两个数num1和num2,求这两个数字在数组中出现的位置的最小距离
实现思路:
遍历数组,更新下标,比较距离值
复杂度:
O(n)时间复杂度
O(1)空间复杂度
package JBArray;
public class MinDistanse {
private static int min(int a, int b){
return a>b? b:a;
}
public static int minDestance(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,4,7,8,9};
System.out.print(minDestance(a, 4, 8));
}
}