day 30 第七章 回溯算法part06 关键是怎么实现起始机场与到达机场的映射,并且具有字典序。● 51. N皇后 棋盘行就是深度,棋盘列就是广度。判断列,45度角,135度角是否存在皇后。终止条件就是遍历到最后一行。需要判断棋格放皇后是否有效。● 332.重新安排行程。● 332.重新安排行程。
day 29 第七章 回溯算法part05 关键是需要去重,重复出现是因为同层取用了相同值的元素,通过对数组排序使相同元素相邻,借助数组标记使用过的元素位置从而判断是否去重。排列有顺序,[1,2] [2,1]是不同的,所以每层都需要从头遍历整个数组。麻烦的点在于去重的判断,已经不能遗漏过程中产生的子集。遍历的时候需要避开已经取用过的元素。
day 27 第七章 回溯算法part03 回溯不好在脑海里硬想,多动手画一次树形结构,这样分析回溯逻辑就更方便了。● 40.组合总和II。● 131.分割回文串。● 40.组合总和II。● 131.分割回文串。● 39. 组合总和。● 39. 组合总和。
day 24 第七章 回溯算法part01 子集问题:一个N个数的集合里有多少符合条件的子集。排列问题:N个数按一定规则全排列,有几种排列方式。组合问题:N个数里面按一定规则找出k个数的集合。切割问题:一个字符串按一定规则有几种切割方式。本质上还是穷举遍历,伴随着递归。棋盘问题:N皇后,解数独等等。
day 23 第六章 二叉树part09 ● 108.将有序数组转换为二叉搜索树。● 108.将有序数组转换为二叉搜索树。● 538.把二叉搜索树转换为累加树。● 538.把二叉搜索树转换为累加树。● 669. 修剪二叉搜索树。● 669. 修剪二叉搜索树。
day 22 第六章 二叉树 ● 235. 二叉搜索树的最近公共祖先。● 235. 二叉搜索树的最近公共祖先。● 701.二叉搜索树中的插入操作。● 450.删除二叉搜索树中的节点。● 701.二叉搜索树中的插入操作。● 450.删除二叉搜索树中的节点。
day 21 第六章 二叉树part07 ● 530.二叉搜索树的最小绝对差。● 236. 二叉树的最近公共祖先。● 530.二叉搜索树的最小绝对差。● 236. 二叉树的最近公共祖先。● 501.二叉搜索树中的众数。● 501.二叉搜索树中的众数。
day 20 第六章 二叉树 part06 二叉搜索树本质是上有序数组,关键就在于有序。● 700.二叉搜索树中的搜索。● 700.二叉搜索树中的搜索。● 98.验证二叉搜索树。● 98.验证二叉搜索树。● 654.最大二叉树。● 617.合并二叉树。● 654.最大二叉树。● 617.合并二叉树。
day 18 第六章 二叉树 part05 ● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树。关键是递归逻辑的书写,要明确前中后序遍历的逻辑,套进递归里。● 112. 路径总和 113.路径总和ii。● 106.从中序与后序遍历序列构造二叉树。105.从前序与中序遍历序列构造二叉树。● 513.找树左下角的值。● 513.找树左下角的值。● 112. 路径总和。113.路径总和ii。
day 17:第六章 二叉树part04 掌握递归的思考过程● 110.平衡二叉树● 257. 二叉树的所有路径● 404.左叶子之和● 110.平衡二叉树/*110. 平衡二叉树简单给定一个二叉树,判断它是否是平衡二叉树一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。/** 返回值深度,传入节点* 终止条件:节点空* 单层递归逻辑:左子节点递归,右子节点递归,返回深度加一,如果判断出节点高度大于1,返回-1,说明不是平衡二叉树*/
day 16:第六章 二叉树part03 自我感觉层序遍历用起来更简单,递归法更难理解。递归法最好写出三要素再写代码● 104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数● 104.二叉树的最大深度 559.n叉树的最大深度/*104. 二叉树的最大深度简单给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。/** 迭代方法,类似层序遍历。
day 15:第六章 二叉树 part02 主要学习了层序遍历(1.借助队列迭代。2.递归)● 层序遍历 10十道题,均可用层序遍历的思想完成(1.借助队列迭代。2.递归)● 226.翻转二叉树我使用的层序遍历的方法对左右节点进行反转,还可以使用递归,递归的时候需要注意用何种顺序进行遍历● 101.对称二叉树 2本质上是要对左右子树分别遍历,并且遍历顺序相反,借助递归法实现● 层序遍历 10102.二叉树的层序遍历/*102. 二叉树的层序遍历中等给你二叉树的根节点 root ,返回其节点值的 层序遍历。
●day 14:第六章 二叉树part01 递归与迭代的区别,递归频繁调用自身,迭代频繁循环判断二叉树遍历方式,深度优先(前序,中序,后序)● 递归遍历● 迭代遍历● 统一迭代(未学习)/*144. 二叉树的前序遍历简单给你二叉树的根节点 root ,返回它节点值的 前序 遍历。* };*/int val;return res;/** 迭代遍历,用栈实现*/if(!while (!
●day 13:第五章 栈与队列part03 单调队列的实现,优先级队列的使用● 239. 滑动窗口最大值● 347.前 K 个高频元素● 239. 滑动窗口最大值/*239. 滑动窗口最大值困难提示给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值。