前提条件:
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;
}
};