数组是最基础的数据结构之一,存储线性数据,内存结构连续。
数组是Go的内置类型,分为静态数组和动态切片。
1 | |
# 实践
# 多个有序数组的第k小数
- 暴力法: 归并排序后取中位数
- 指针法:只计中位数
- 通用寻找第k小数方法
- 二分法比较排除较小数组的前k/2个元素
- 递归查找(k - k/2)/2个元素
# 二分法-升序数组搜索插入位置
- 暴力法,直接搜索,时间复杂度O(n)
1 | |
- 二分法,时间复杂度O(logn)
1 | |
# 双指针法-数组原地移除元素
- 暴力法,查到一个挪一个,时间复杂度O(n2),空间复杂度O(1)
- 快慢指针法,时间复杂度O(n),空间复杂度O(1)
1 | |
# 滑动窗口-长度最小的连续子数组
- 暴力法,两层循环,记下最小长度,时间复杂度O(n2)
1 | |
- 滑动窗口,右指针不断右移,当不满足条件时,左指针右移直到满足条件
1 | |
# 过程模拟-螺旋矩阵
- 直接过程模拟,可用递归或迭代方式模拟每圈
1 | |
# 双指针法-平方数之和
1 | |
# 二分法-搜索旋转排序数组