1. 程式人生 > >二分查詢(另一種獨特實現)

二分查詢(另一種獨特實現)

int binarySearch(vector<int>& nums, int target){
    if (nums.size() == 0)
        return -1;

    int left = 0, right = nums.size() - 1;
    while (left + 1 < right){
        // Prevent (left + right) overflow
        int mid = left + (right - left) / 2;
        if (nums[mid] == target) {
            return mid;
        } else if (nums[mid] < target) {
            left = mid;
        } else {
            right = mid;
        }
    }

    // Post-processing:
    // End Condition: left + 1 == right
    if(nums[left] == target) return left;
    if(nums[right] == target) return right;
    return -1;
}

用於搜尋需要訪問當前索引及其在陣列中的直接左右鄰居索引的元素或條件。 關鍵屬性: 實現二分查詢的另一種方法。 搜尋條件需要訪問元素的直接左右鄰居。 使用元素的鄰居來確定它是向右還是向左。 保證查詢空間在每個步驟中至少有 3 個元素。 需要進行後處理。 當剩下 2 個元素時,迴圈 / 遞迴結束。 需要評估其餘元素是否符合條件。