一、数组理论基础
数组是存放在连续空间中相同数据的集合

其次数组的元素不能删除只能覆盖,数组的增删必然需要移动其他元素。
二、二分搜索法
二分搜索法顾名思义,即把一个有序的数组不断地进行二分已得到最终答案,但是也有需要注意的点,以区间为左闭右开为例:
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;
}
本文介绍了数组的基础知识,包括其存储特性和元素操作。接着讨论了二分搜索法的实现,特别是左闭右开区间的应用。此外,文章还展示了如何使用快慢指针法在O(n)时间内移除数组元素,避免了暴力解法的时间复杂度问题。
514

被折叠的 条评论
为什么被折叠?



