学习目标:
- 数组理论基础: (1) 了解一下数组基础;(2) 了解数组的内存空间地址。
- 704. 二分查找: 把 704写熟练,要熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法
- 27. 移除元素: 暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法 是本题的精髓,今日需要掌握。
学习内容:
数组理论基础
文章链接:代码随想录
题目建议: 了解一下数组基础,以及数组的内存空间地址,数组也没那么简单。
704. 二分查找
题目建议: 大家能把 704 掌握就可以,35.搜索插入位置 和 34. 在排序数组中查找元素的第一个和最后一个位置 ,如果有时间就去看一下,没时间可以先不看,二刷的时候在看。
先把 704写熟练,要熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法。
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili
27. 移除元素
题目建议: 暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法 是本题的精髓,今日需要掌握,至于拓展题目可以先不看。
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
学习产出:
- 笔记 2 条
def removeElement(self, nums: List[int], val: int) -> int:
fast = 0
slow = 0
size = len(nums)
while fast < size:
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
(1) 为什么用while而不是if?
if 语句是一个条件判断语句,它只会在条件满足时执行一次代码块,并不会继续检查列表中的其他元素。while 循环则会在条件满足的情况下反复执行代码块,可以用来遍历列表中的所有元素。使用 while 循环可以确保我们遍历整个列表,对每一个元素进行检查,从而正确地删除所有等于 val 的元素,并返回新的列表长度。
(2) 为什么需要nums[slow] = nums[fast]这行代码?
作用是将 fast 指针当前指向的元素复制到 slow 指针当前指向的位置。这一步是关键,因为它在构建一个不包含指定值 val 的新数组(实际上是将符合条件的元素移到数组的前部)。