数组总结篇

本文介绍了数组在C++中的基本概念,包括内存布局、操作限制,以及二分查找、双指针法、滑动窗口和模拟行为等常用算法的应用。重点讲解了这些算法的时间复杂度和实现原理。
摘要由CSDN通过智能技术生成

(本文的图均引用自代码随想录) 

数组理论基础

1、数组是存放在连续内存空间上的相同类型数据的集合

2、

  • 数组下标都是从0开始的。
  • 数组内存空间的地址是连续的

因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。

但是数组的元素是不能删除,只能覆盖的

同时学会了创建数组的语法 Vector<int> 名字(长度,数值);

二维数组只需要将数值再嵌套一层即可

3、二维数组在内存空间中是连续的(C++)

4、

  • 数组在内存中是连续的地址空间,不能释放单一元素,如果要释放,就是全释放(程序运行结束,回收内存栈空间)。
  • C++中vector和array的区别,vector的底层实现是array

这章学到的方法

1、二分法

时间复杂度:O(n)

主要的是一个循环不变量原则,对于之后每次边界的处理是保持一致的,同时二分法有两种写法,例如左闭右闭,左开右开,具体的写法可以参考这篇我写的总结,同时其中二分法的对于mid元素的取等,可以做到最大化搜索最小化搜索,也就是找到第一个大于等于target的元素,和找到最后一个小于等于target的值,以及其中具体的下标计算,均在下方的博客中提及

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素-CSDN博客

 

2、双指针法

时间复杂度:O(n)

通过快慢指针来移除元素,一个是寻找新的数组元素填入,一个是记录当前的下标,用一个for循环就可以做两个for循环的事,具体的可以看下方博客,同时第二天的有序数组平方和,也是利用了双指针法的思想,通过一个头指针,一个尾指针来寻找最大的数,并从尾填入新数组

具体的总结和题目可以看下方的博客:

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素-CSDN博客

代码随想录算法训练营第二天 | 977.有序数组的平方、209.长度最小的子数组、 59.螺旋矩阵II-CSDN博客 

3、滑动窗口

时间复杂度:O(n)

通过一个动态变化的窗口,可以避免对于所有情况的遍历,其中比较巧妙的是j是作为终止位置去扩大窗口满足条件,在这个循环中,如果一旦发现了满足条件的数组,便可以移动初始位置i,来缩减这个数组,以此来寻找最小的子数组,这是后往前的思想,具体的题目和总结看上方第二天的博客

4、模拟行为

这个是比较常见的一种行为,在螺旋矩阵这个题目中,我们模拟的是一个矩阵的构造,就是一条一条边的写,具体代码和总结在第二天的博客中,其中也是很巧妙的运用了循环不变量的原则

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值