打卡 35.搜索插入位置

文章介绍了如何利用二分法在无重复元素的升序数组中找到目标值(target)的插入位置。分别展示了左闭右闭、左闭右开两种区间定义的二分查找实现,包括处理目标值等于中间元素的情况以及数组中未找到目标值时返回插入位置的逻辑。
摘要由CSDN通过智能技术生成

万事开头难
在这里插入图片描述
题目提示为无重复元素的升序数组,可以考虑二分法
方法一:暴力解法

int searchInsert(int* nums, int numsSize, int target){
int i = 0;
for(;i<numsSize;i++){   //遍历数组
    if(nums[i] >= target)    //四种情况 1.最小,下标为0.  2.最大,下标为numSize
        return i;            //3.有相等的值,返回下标i  4.target在两个数之间
}
return numsSize;    //target为最大,排在数组最后
}

主要是用来感受二分法的区间定义
题解里面的画解算法的图特别棒
在这里插入图片描述

左闭右闭:

int searchInsert(int* nums, int numsSize, int target){
int left = 0;
int right = numsSize - 1;
int mid = 0;

while(left <= right){  //定义区间为[left,right]
mid = left + (right - left) / 2;
if(target < nums[mid])   //在左区间
    right = mid - 1;
else if(target > nums[mid])   //在右区间
    left = mid + 1;
else    //target == nums[mid]
    return mid;
}
//数组中未找到target元素
//target在数组所有元素之后,[left, right]是右闭区间,需要返回 right +1
return right + 1;
}

左闭又开

int searchInsert(int* nums, int numsSize, int target){
int left = 0;
int right = numsSize;
int mid = 0;

while(left < right){  //定义区间为[left,right]
mid = left + (right - left) / 2;
if(target < nums[mid])   //在左区间
    right = mid;
else if(target > nums[mid])   //在右区间
    left = mid + 1;
else    //target == nums[mid]
    return mid;
}
//数组中未找到target元素
//target在数组所有元素之后,[left, right]是右闭区间,需要返回 right +1
return right;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值