算法中哨兵技巧

哨兵:國家邊界的站崗士兵;這裏引申爲處理邊界值的問題。

實例:

需求:數組中找值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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章