一、数组理论基础
数组是存放在连续空间中相同数据的集合
其次数组的元素不能删除只能覆盖,数组的增删必然需要移动其他元素。
二、二分搜索法
二分搜索法顾名思义,即把一个有序的数组不断地进行二分已得到最终答案,但是也有需要注意的点,以区间为左闭右开为例:
int search(int* nums, int numsSize, int target){
int left=0;
int right=numsSize-1;
while(left<=right)
{
int mid=(left+right)/2;
if(nums[mid]>target)
{
right=mid-1;
//更新右端点
}
else if(nums[mid]<target)
{
left=mid+1;
//更新左端点
}
else if(nums[mid]==target)
{
return mid;
}
}return -1;
}
若定义区间为左闭右开,即:
1.while (left<=right)改为小于;
2.右端点更新时取right=mid;
3.左端点不改变。
三、移除数组元素(快慢指针法)
如果使用暴力解法,即使用双循环,时间复杂度将是o(n*2),但如果使用双指针法,时间复杂度将是o(n),因为只进行了一次循环,所谓双指针,即有一个快指针和一个慢指针,快指针用来寻找填入数组的数据,慢指针用来确定填入数据的位置,如下链接有动画演示
int removeElement(int* nums, int numsSize, int val){
int slow=0;
for(int fast=0;fast<numsSize;fast++)
{
if(nums[fast]!=val)
nums[slow++]=nums[fast];
}
return slow;
}