自己想法:之前就已经学习过二分查找,但是边界问题没有搞清楚,自己写代码就会出错
学习完之后:学习到了用区间这个不变量来确定循环出口以及分支语句的设定
b.LeetCode34. 在排序数组中查找元素的第一个和最后一个位置
自己想法:暴力直接搜索
看完文章:用二分查找时时更新左右边界,到达循环出口时就是需要的左右边界,最后输出区间即可,((假设目标元素在数值中间且没有找到)假设现在的middle对应下标的元素比target小,所以你知道middle一定不是它的rborder比如12356,target是4,而middle是3,那你知道应该要从第四个元素向后找,因为第三个element比target小)
2.双指针
a.LeetCode 27.移除数组
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文章讲解:代码随想录
视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili
自己想法:暴力解法,利用双重循环外层循环用于找到需要移除掉的元素,内层循环用于在这个需要移除的元素的基础上将后面的元素全部往前面移动一位。
学习完之后:双指针做法,用快指针来遍历原先的数组,找到需要移除的元素,慢指针用来更新新数组(这个新数组也是在原来数组的基础上,因为会有需要移除的元素,所以新数组的大小不会超过原来数组的大小,所以可以直接使用原来数组,这也是题目的要求),当快指针遍历到了目标元素(这个元素是新数组不需要的)那么慢指针这个时候不会更新,其余时候慢指针都需要更新,并且需要将不用移除的元素直接复制到慢指针所指向的位置。
b.LeetCode
自己想法:从前往后遍历,没有遇到#就加入新数组(也就是原数组),遇到#就将指针往后面退一格,但是这样问题很大。并不是真正的删除了这个字符,在后面没有遇到#时还会遍历到之前这个没有被“删除”的字符,只过了两个测试点。
看完双指针题解:我也想到从后往前遍历,但是没有想到,可以用一个变量来记录退格符的数量然后在进行计算。
文中的文章和视频链接来自代码随想录