哨兵:国家边界的站岗士兵;这里引申为处理边界值的问题。
实例:
需求:数组中找值key所在的位置
public class GuardTest {
public static void main(String[] args) {
int[] array = {1,3,5};
System.out.println(searchValue(array, 3));
System.out.println(searchValueWithGuard(array, 3));
}
public static int searchValue(int[] array, int value){
int length = array.length;
int i = 0;
while(i < length){
if(array[i] == value){
return i;
}
i++;
}
return value;
}
/**
* desc:用到了哨兵,复杂化了逻辑,减少了while循环
*/
public static int searchValueWithGuard(int[] array, int value){
int length = array.length;
if(array[length-1] == value){
return length-1;
}
int tmp = array[length-1];
array[length-1] = value;
int index = 0;
while(array[index] != value){
index++;
}
if(index == length-1){
index = -1;
}
array[length-1] = tmp;
return index;
}
}