- 今日学习的文章链接和视频链接
- 自己看到题目的第一想法
- 看完代码随想录之后的想法
- 自己实现过程中遇到哪些困难
- 今日收获,记录一下自己的学习时长
题目链接
数组理论基础
文章链接:https://programmercarl.com/数组理论基础.html
题目建议:了解一下数组基础,以及数组的内存空间地址,数组也没那么简单。
704. 二分查找
题目建议: 大家能把 704 掌握就可以,35.搜索插入位置 和 34. 在排序数组中查找元素的第一个和最后一个位置 ,如果有时间就去看一下,没时间可以先不看,二刷的时候在看。
先把 704写熟练,要熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法。
题目链接:https://leetcode.cn/problems/binary-search/
文章讲解:https://programmercarl.com/0704.二分查找.html
视频讲解:https://www.bilibili.com/video/BV1fA4y1o715
27. 移除元素
题目建议: 暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法 是本题的精髓,今日需要掌握,至于拓展题目可以先不看。
题目链接:https://leetcode.cn/problems/remove-element/
文章讲解:https://programmercarl.com/0027.移除元素.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP
解题思路
704.二分查找
关键词
- 有序数组
- 无重复元素,因为一旦有了重复元素,二分查找法返回的元素下标不一定是唯一的
思路
- 找到数组中间的下标
- 如果中间下标对应的值大于目标值,则说明目标值在左半边数组
- 如果中间下标对应的值小于目标值,则说明目标值在右半边数组
- 循环往复,直到中间下标对应的值等于目标值,返回下标值,否则返回-1
- 可以构建两个指针,通过移动指针的位置来缩小区间范围
- 需要注意区间的边界值,也就是左闭右闭、左闭右开两种情况的取值和判断
- 左闭右闭测试用例为单个元素数组,即左===右,所以while循环需要≤
- 左闭右开其实对while循环边界无要求,因为左不可能等于右,是无效空间
27.移除元素
关键词
- 原地删除/修改
思路
题解
704.二分查找
27.移除元素
收获
- 位运算取中间下标
const mid = left + ((right - left) >> 1)
,相当于Math.floor
舍掉多余
- 双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组、链表、字符串等操作的面试题,都使用双指针法。
- 好久没刷题,全忘光了,基本都是跟着题解的思路做题,希望第二遍的时候可以有点自己的思路