给定数组A,相邻元素差的绝对值都是1,现在给定一个目标整数t,请找到t在A中的位置:
处理逻辑
- 判断该数组是否为空,是则返回-1,否则进行下面的步骤;
- 判读数组长度是否为0,是则返回-1,否则进行下面的步骤;
- 使用StrictMath的abs()计算目标整数与数组首位的绝对值;
- 取绝对值判断该绝对值位置的值,判断是否等于目标t,是则返回当前位置,否则进入下一步骤;
- 计算当前位置与目标值之差的绝对值,取当前位置+绝对值,重复第4步,直到找到位置,或超过数组的长度;
为什么要使用绝对值叠加?
因为数组中相邻元素差的绝对值为1,所以当目标值,与当前位置值差的绝对值为实际元素位置差的最小值;
源码
public static int SearchIndexByArray(int[] A,int t){
if(A==null){
return -1;
}
int length = A.length;
if(length==0){
return -1;
}
int nextArrayIndex = abs(t-A[0]);
while(nextArrayIndex<length){
if(A[nextArrayIndex]==t){
return nextArrayIndex;
}else{
nextArrayIndex = abs(t-A[nextArrayIndex]);
}
}
return -1;
}