数组理论基础
文章链接:数组理论基础
进度:okok
704.二分查找
文章讲解:二分查找
视频讲解:手撕二分法
进度:完成,一看就会,一写就废
代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0;
int right=nums.size()-1;
while(left<=right)
{
int middle=left+((right-left)/2);
if(nums[middle]>target)
{
right=middle-1;
}
else
if(nums[middle]<target)
{
left=middle+1;
}
else
{
return middle;
}
}
return -1;
}
};
思路:
使用二分查找条件(有序数组,并且数组中无重复元素)
写法1:左闭右闭
while(left<=right) right=middle-1
写法2:左闭右开
while(left<right) right=middle
27.移除元素
文章讲解:移除元素
视频讲解:移除元素
进度:快慢双指针(忘记了,是nums.size(),不用-1)
代码:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slowpointer=0;
int fastpointer;
for(fastpointer=0;fastpointer<nums.size();fastpointer++)
{
if(val!=nums[fastpointer])
{
nums[slowpointer++]=nums[fastpointer];
}
}
return slowpointer;
}
};
思路:
erase()删除数组某某元素 O(n)
慢指针相当于更新新数组
如果快指针所指的元素不等于目标元素 ,也就是不是要删除的元素时,我们需要更新新数组。
如果快指针所指的元素等于目标元素,我们就不需要更新数组,就将这个元素跳过,慢指针下标也不会变