代码随想录DAY1|704.二分查找、27.移出元素

前提条件:
1、有序数组
2、无重复元素
要点:
处理边界条件
前提:
数组 int* num ,数组大小 numsize,查找目标 target,数组大小为numsize=num.size()

边界处理类型:

1、左闭右闭[a,b]
此时,存在a<=b,且target可以等于b,
所以
while(left<=right)
left=0,right=numsize-1

2、左闭右开[a,b)
此时a不能等于b,
所以
while(a<b)
left=0,right=numsize//仍然需要考虑数组的最后一个元素

704.二分查找

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size()-1;
        while(left<=right)
        {
int mid=left+(right-left)/2;
if(target<nums[mid])
right=mid-1;
else if(target>nums[mid])
left=mid+1;
else
return mid;
}
return -1;
    }
};

双指针法:

通过一个快指针和一个慢指针在一个for循环下完成两个for循环的工作

需要考虑每次指针变换的条件

27.移除元素

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
int fast=0,slow=0;
for(fast=0;fast<nums.size();fast++)
{
    if(nums[fast]!=val)
    {
        nums[slow]=nums[fast];
        slow++;
    }
}
return slow;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值