今日知识点笔记:
数组是存放在连续内存空间上的相同类型数据的集合
数组可以方便的通过下标索引的方式获取到下标对应的数据
-
数组下标都是从0开始的。
-
数组内存空间的地址是连续的
- 正是因为数组在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址
- 数组的元素是不能删的,只能覆盖。
704. 二分查找
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili
二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。
定义target在左闭右闭即[left, right],所以有如下两点:
-
while (left <= right) 要使用 <= ,因为left == right是有意义的,所以使用 <=
-
if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1
target 是在一个在左闭右开即[left, right),那么二分法的边界处理方式则截然不同。有如下两点:
-
while (left < right),这里使用 < ,因为left == right在区间[left, right)是没有意义的
-
if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]
27. 移除元素
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili
双指针:
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
-
快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
-
慢指针:指向更新 新数组下标的位置
快指针可以理解为read
慢指针可以理解为write
总结:重新理解了数组和二分法,坚持!