Merge pull request #1672 from vanyongqi/master

提交C语言两种种版本
This commit is contained in:
程序员Carl
2022-10-06 20:49:27 +08:00
committed by GitHub

View File

@ -429,7 +429,57 @@ function searchInsert($nums, $target)
return $r + 1;
}
```
### C
```c
//版本一 [left, right]左闭右闭区间
int searchInsert(int* nums, int numsSize, int target){
//左闭右开区间 [0 , numsSize-1]
int left =0;
int mid =0;
int right = numsSize - 1;
while(left <= right){//左闭右闭区间 所以可以 left == right
mid = left + (right - left) / 2;
if(target < nums[mid]){
//target 在左区间 [left, mid - 1]中原区间包含mid右区间边界可以向左内缩
right = mid -1;
}else if( target > nums[mid]){
//target 在右区间 [mid + 1, right]中,原区间包含mid左区间边界可以向右内缩
left = mid + 1;
}else {
// nums[mid] == target 顺利找到target直接返回mid
return mid;
}
}
//数组中未找到target元素
//target在数组所有元素之后[left, right]是右闭区间,需要返回 right +1
return right + 1;
}
```
```c
//版本二 [left, right]左闭右开区间
int searchInsert(int* nums, int numsSize, int target){
//左闭右开区间 [0 , numsSize)
int left =0;
int mid =0;
int right = numsSize;
while(left < right){//左闭右闭区间 所以 left < right
mid = left + (right - left) / 2;
if(target < nums[mid]){
//target 在左区间 [left, mid)中原区间没有包含mid右区间边界不能内缩
right = mid ;
}else if( target > nums[mid]){
// target 在右区间 [mid+1, right)中原区间包含mid左区间边界可以向右内缩
left = mid + 1;
}else {
// nums[mid] == target 顺利找到target直接返回mid
return mid;
}
}
//数组中未找到target元素
//target在数组所有元素之后[left, right)是右开区间, return right即可
return right;
}
```
-----------------------
<div align="center"><img src=https://code-thinking.cdn.bcebos.com/pics/01二维码一.jpg width=500> </img></div>