2024.03.19_学习日记
天气:晴
学习地点:学校
学习时长:8h
学习内容
- lc450
删除一个节点以后,关键的是要用右子树的最小值或者左子树的最大值来替换当前节点,同时递归删除对应子树的节点。 - 滑动窗口
该算法的核心思想是利用双端队列维持当前滑动窗口内的最大值。队列的首部始终保存当前窗口的最大值的索引,而队列本身保持递减顺序。这样每次滑动窗口移动时,只需要比较新进入窗口的元素与队尾元素;如果更大,则弹出队尾元素,直到该条件不满足为止,然后将新元素加入队列。同时,检查队首元素是否已经不在窗口内,如果是,则将其从队首移除。这种方法的时间复杂度为 O(n),因为每个元素最多被压入和弹出队列一次。 - 解数独
这段代码实现了一个典型的回溯算法来解决数独问题。它首先遍历每个空白位置(用.表示),然后尝试填充数字1到9,每次填充后都会递归地尝试解决剩下的数独。如果在某个位置上所有数字都不能导致一个有效解决方案,算法会回溯到之前的状态,尝试下一个数字。这个过程一直持续,直到找到有效解决方案或确定数独无解。 - 汉明重量
删掉最后一个1就是n&=n-1。二进制表达方式就是bin(8) - 煎饼排序
煎饼排序的基本思想是在每一步找到未排序部分的最大元素,并通过最多两次翻转操作将其移动到未排序部分的末尾。 - 和为k的数组
遍历数组,计算每个位置的前缀和,并使用字典 dic 记录每个前缀和出现的次数。在遍历过程中,如果存在前缀和为 pre - k 的子数组,说明存在一个和为 k 的子数组,因此更新计数器 count。最后返回 count 即可得到满足条件的子数组数量。