(c++)数组笔试知识点总结01

# 数组

一、理论基础

1.数组内存空间地址是连续的,数组下标从0开始,地址表示16进制

2.数组的元素不能删除,只覆盖:删除指定下标元素,后面内容前移;

 

二、二分查找

1.使用条件:有序数组且数组中无重复元素

2.边界条件:

```
//左闭右闭,二分查找中间值为middle-1,闭区间说明可以取到
class Solution{
public:
int search(vector<int>& nums,int target){
int left=0;
int right=num.size()-1;//左闭右闭
while(left<=right)
{
int middle = (right-left)/2+left;
if (num[middle]>target)
{
right=middle-1;//target在左区间
}else if(num[middle]<target)
{
left= middle+1;//target在右区间
}else
{
return middle
}
}
}
return -1; //为找到目标值
}
```

```
//左闭右开,二分查找中间值为middle,右区间不能取到
class Solution{
public:
int search(vector<int>& nums,int target){
int left=0;
int right=num.size();//左闭右开
while(left<right)
{
int middle = ((right-left)>>1)+left;//(right+left)//2
if (num[middle]>target)
{
right=middle;
}else if(num[middle]<target)
{
left= middle+1;
}else
{
return middle
}
}
}
return -1; //为找到目标值
}
```

三、移除元素

1.暴力解法:时间复杂度O(n^2);空间复杂度O(1)。

2.快慢指针法:时间复杂度O(n);空间复杂度O(1)

 

四、有序数组平方

1.暴力解法:直接平方,再快速排序

2.双指针法:指向数组的首尾,比较其平方大小。

 

五、长度最小的子数组

1.滑动窗口法:考虑窗口是什么?,窗口的起始位置与结束位置如何移动

六、螺旋矩阵||

1.坚持左闭右开原则,注意旋转顺序。

 

 

 

 
posted @ 2022-03-02 23:05  Whp_bicycle  阅读(45)  评论(0编辑  收藏  举报