代码随想录day2 - 数组章节总结
目录
1、数组基础:
数组在内存地址中是连续的。数组下标从0开始。数组的读取为O(1)。数组的删除为O(N)。
2、二分查找:
二分查找的思想是每次查找都从区间的中间开始查找,若middle小于target则要扩大left区间,若middle大于target则要缩小right区间。
for left <= right {
mid := left + (right - left) / 2
if xxx {
left/right = xxx
} else {
right/left = xxx
}
}
3、双指针法(快慢指针法):
通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
slow := 0 for fast:=0;fast<len(nums);fast++{ if nums[fast] != target { nums[slow] = nums[fast] slow++ } }
3、滑动窗口
在本题中实现滑动窗口,主要确定如下三点:
- 窗口内是什么?
- 如何移动窗口的起始位置?
- 如何移动窗口的结束位置?
窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。
窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。
窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。
解题的关键在于 窗口的起始位置如何移动.
l, r := 0,0
count := len(nums)+1
for r < len(nums) {
sum += nums[l]
for sum >= target {
count = min(count, r-l+1)
sum -= nums[l]
l++
}
r++
}
4、螺旋矩阵
模拟顺时针画矩阵的过程:
- 填充上行从左到右
- 填充右列从上到下
- 填充下行从右到左
- 填充左列从下到上
由外向内一圈一圈这么画下去。
//上下左右
top, bottom,left,right := 0,n-1,0,n-1
//构建矩阵
matrix := make([][]int,n)
num := 1
tar := n*n
for num <= tar {
for i:=left;left<=right;i++{ // 往哪哥方向走就用它的值啊
matrix[top][i] = num // 注意看是行在变还是列在变
num++
}
top-- //填充完一行后要对应--或者++
}