算法训练营|数组总结

时间复杂度:算法执行语句的次数

空间复杂度:算法在运行过程中临时占存储空间大小


数组(C++):

存放在连续内存空间的相同类型固定大小的数据的集合,不能删除,只能覆盖

列表(Python):

数据可以是不同类型,列表长度可变


1.二分查找

循环不变量原则,清楚区间定义

时间复杂度:O(logn)

空间复杂度:O(1)

2.双指针法

快指针找到新数组元素,慢指针指向新数组下标

时间复杂度:O(n)

空间复杂度:O(1)

3.双指针法

因为数组有序,所以最大的元素在数组的两端,比较起始指针和终止指针指向的元素,将更大从新数组的尾部开始放入

可以先判断元素是否都是正数或负数

时间复杂度:O(n)

空间复杂度:O(1)

4.滑动窗口

窗口:满足条件的子序列

循环移动窗口终止位置,当满足条件时,获取此时窗口长度,移动窗口起始位置,再次查看是否满足条件,满足则更新窗口长度,移动窗口起始位置,否则移动窗口终止指针,以此直到找到最短长度

时间复杂度:O(n)

空间复杂度:O(1)

C++:

最大正整数:INT32_MAX,最大负整数:INT32_MIN

条件运算符(三元运算符):

表达式1?表达式2:表达式3;

表达式1为真,则执行表达式2,为假,则执行表达式3

Python:

正无穷大:float("inf"),负无穷大:float("-inf")

三元运算符:

表达式1  if  判断条件  else  表达式2

判断条件为真,则执行表达式1,为假,则执行表达式2

5.模拟

循环不变量原则,确定区间边界

时间复杂度:O(n*n)

空间复杂度:O(1)

C++:

定义二维数组:

vector>  数组名(size1,vector(size2,0))

创建类型是vector,size1长度的数组,,每个元素是int类型,size2长度

Python:

定义二维列表:

列表名=[表达式  for  _  in  range(size)]

6.前缀和

重复利用计算过的子区间

设置前缀和数组:

1.perfixsum += nums[i]       perfix[i] = perfixsum

2.perfix[i] = perfix[i-1] + n[i]

求解区间:

1.a = 0    perfix[0] = nums[0]

2.sum = perfix[b] - perfix[a-1]

时间复杂度:O(n)

空间复杂度:O(1)

7.前缀和

分别创建横前缀和数组,纵前缀和数组,分区间比较差值

时间复杂度:O(n*n)

空间复杂度:O(1)

你可能感兴趣的:(数据结构,算法,leetcode,python,c++)