目录
1 今日学习的文章
数组理论基础
二分查找
根据是否满足题目的条件来缩小答案所在的区间,这个就是二分的本质。另外需要注意,二分的使用前提:有序数组
文章链接
看到题目的第一想法
二分法比较熟悉之前在王道数据结构中多次接触过,感觉应该很简单
看到代码随想录之后的想法
发现二分法会有区间限制,左闭右开,左闭右闭,两种实现方式中存在玄机
自己实现过程中遇到的困难
在自己实现过程中,会发现没有想象中的那么简单
1 . 在王道数据结构中mid的取值为 mid = (low+high)/2,而在代码随想录中,mid取值为mid=low+(high-low)/2,群里给出了原因:第一种方式溢出的可能性比较大,比如Java的int的最大值为2^31-1,如果low和high都超过了最大值的一半,那么它们相加就溢出了
2. 二分查找的关键在于定边界,实际模拟一下 二分的关键就在边界
可以参考每日精华的一些总结:https://www.yuque.com/chengxuyuancarl/wnx1np/ktwax2#35ee2f7d
- 什么是区间不变量? 比如 区间取左闭右闭的话 那么每次区间二分 范围都是新区间的左闭右闭 后面做判断时 要一直基于这个左闭右闭的区间
- 其实区间定义成开或者闭都没有什么关系 只是要明确每次收缩范围后 范围内的元素是哪些 注意会不会漏掉边界就好
移除元素
掌握双指针
文章链接
题目建议: 暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法 是本题的精髓,今日需要掌握,至于拓展题目可以先不看。
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
看到题目的第一想法
可以用暴力做,但是想着是用插入排序差不多的思想,不过还是失败了
可以用双指针,用的双相的还是有问题
看到代码随想录之后的想法
代码随想录的双指针简洁有效,大致思路时快指针和慢指针
快指针用来找能替换的元素
慢指针用来定位需要替换的位置
- 快指针可以理解成在旧数组中找非目标元素,然后赋值给慢指针指向的新数组,虽然都指向一个数组
自己实现过程中遇到的困难
1 最终返回时返回的时lowIndex+1 其实应该时lowIndex(想一下如果数组中所有值都为val,则返回0)
2 双向双指针还是会有各种各样的问题,目前还没找出来