diff --git a/problems/0704.二分查找.md b/problems/0704.二分查找.md index 53f5331a..26d821bd 100644 --- a/problems/0704.二分查找.md +++ b/problems/0704.二分查找.md @@ -515,7 +515,7 @@ impl Solution { ``` **C:** -```c +```c(版本一) int search(int* nums, int numsSize, int target){ int left = 0; int right = numsSize-1; @@ -541,6 +541,29 @@ int search(int* nums, int numsSize, int target){ return -1; } ``` +``` +C (版本二) +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