天天看點

2021-09-08二分法查找 -LeetCode

二分法查找 -LeetCode

題目

給定一個 n 個元素有序的(升序)整型數組 nums 和一個目标值 target ,寫一個函數搜尋 nums 中的 target,如果目标值存在傳回下标,否則傳回 -1。

輸入: nums = [-1,0,3,5,9,12], target = 9

輸出: 4

解釋: 9 出現在 nums 中并且下标為 4

輸入: nums = [-1,0,3,5,9,12], target = 2

輸出: -1

解釋: 2 不存在 nums 中是以傳回 -1

public static int search(int[] nums, int target) {
        // 找出最左邊和最右邊的下标,并記錄
        int left = 0 , right = nums.length-1;
        while(left <= right){   // 如果左邊下邊比右邊下表小酒繼續執行
            int mil = left + (right - left) /2; // 找出中間的那個下标
            if (nums[mil] == target){   // 判斷中間下标和要求的是否相等
                return mil;
            }else if(nums[mil] > target){   // 如果中間的數大,中間數下标-1指派給right
                right = mil - 1;
            }else{  // 如果中間的數小,中間數下标+1指派給left
                left = mil + 1;
            }
        }
        return -1;
    }
    ```