diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index 51f48267..7160a884 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -517,6 +517,7 @@ impl Solution { **C:** ```c +// (版本一) 左闭右闭区间 [left, right] int search(int* nums, int numsSize, int target){ int left = 0; int right = numsSize-1; @@ -542,6 +543,29 @@ int search(int* nums, int numsSize, int target){ return -1; } ``` +```C +// (版本二) 左闭右开区间 [left, right) +int search(int* nums, int numsSize, int target){ + int length = numsSize; + int left = 0; + int right = length; //定义target在左闭右开的区间里,即:[left, right) + int middle = 0; + while(left < right){ // left == right时,区间[left, right)属于空集,所以用 < 避免该情况 + int middle = left + (right - left) / 2; + if(nums[middle] < target){ + //target位于(middle , right) 中为保证集合区间的左闭右开性,可等价为[middle + 1,right) + left = middle + 1; + }else if(nums[middle] > target){ + //target位于[left, middle)中 + right = middle ; + }else{ // nums[middle] == target ,找到目标值target + return middle; + } + } + //未找到目标值,返回-1 + return -1; +} +``` **PHP:** ```php