From df5a6c62d50d0473745ce3406ceb4e04864fded1 Mon Sep 17 00:00:00 2001 From: vanyongqi <46806467+vanyongqi@users.noreply.github.com> Date: Tue, 20 Sep 2022 18:17:56 +0800 Subject: [PATCH] =?UTF-8?q?Update=200704.=E4=BA=8C=E5=88=86=E6=9F=A5?= =?UTF-8?q?=E6=89=BE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加了二分查找C语言的左闭右开区间的版本,已通过leeitcode的验证 --- problems/0704.二分查找.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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