
数据结构与算法分析设计
文章平均质量分 59
包含Leetcode算法,数据结构等知识
勿念不悔
这个作者很懒,什么都没留下…
展开
-
回溯核心思想
文章目录回溯核心思想1 组合问题I1.1 题目描述1.2 解题思路1.3 核心代码2 组合问题II2.1 题目描述2.2 解题思路2.3 核心代码3 排列问题3.1 题目描述3.2 解题思路4 排列问题II4.1 题目描述4.2 核心代码回溯核心思想1 组合问题I1.1 题目描述给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],原创 2021-08-06 22:52:45 · 251 阅读 · 1 评论 -
二叉搜索树(构建&&检索)
二叉搜索树(构建&&检索)1 二叉搜索树的构建1.1 题目描述给定一个数组,该数组中存在n个元素,将该数组中的元素按照顺序插入二叉树中,能够构造一棵二叉树,该二叉树中序遍历是顺序递增的。1.2 解题思路给定一棵已经存在的树,初始时树为null,按照二叉树中的顺序向该二叉树中插入元素,直到所有节点都插入root树中,返回root。如何插入?终止条件:如果当前root为空,直接new TreeNode,将val赋值,然后左右子树为空。单层函数逻辑:如果val > roo原创 2021-07-28 13:08:34 · 683 阅读 · 0 评论 -
LeetCode 513 找树左下角的值(带动画图解!)
LeetCode 513 找树左下角的值(带动画图解!)文章目录LeetCode 513 找树左下角的值(带动画图解!)1 题目描述2 解题思路3 代码实现4 动画展示1 题目描述给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。示例 1:输入: root = [2,1,3]输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7]输出: 7来源:力扣(LeetCode)链接:https://原创 2021-07-23 23:12:00 · 206 阅读 · 0 评论 -
Leetcode 110-平衡二叉树
1 题目描述2 解题思路先判断左子树是否平衡,再判断右子树是否平衡,如果有一者不平衡,则返回false,否则返回true,这是平衡函数。当左右树中有任意个不平衡时,就会返回false,当两个都平衡时,对比左子树和右子树的高度,当高度差在1内时表明平衡。关于计算高度,需要用到高度计算函数(递归实现)。3 实现代码/** * Definition for a binary tree node. * public class TreeNode { * int val; *原创 2021-07-20 18:07:18 · 95 阅读 · 0 评论 -
回溯-例题实战
1 寻找二叉树所有路径(leetcode 257)1.1 backtracking设计从可选取列表选择当前遍历元素,进行递归调用,递归调用后再进行回溯,即把该元素从选取列表中移除,进入下一个回溯递归调用。if(root.left != null){ backTracking(root.left, path); path.remove(path.size() - 1); } if(root.right != null){原创 2021-07-11 16:46:22 · 74 阅读 · 0 评论 -
回溯-算法核心思想
1 简介回溯是递归的副产品,有递归就会有回溯处理节点backTrack //递归回溯,撤销处理结果for循环进行横向遍历backTracking进行横向遍历2 解题思路(核心)回溯搜索的遍历;for (选择本层集合中的元素){ 处理节点; backTracking(路径,选择列表); //递归 回溯,撤销结果}返回值以及参数:不容易一次性确定下来,先写逻辑,需要啥参数就填啥参数回溯终止条件。...原创 2021-07-11 16:34:51 · 265 阅读 · 0 评论 -
二叉树-递归和迭代(前中后序)Leetcode 144、94、145
1. 原理1.1 递归每一次递归调用都会把函数的局部变量、参数值、返回地址压入调用栈中,递归返回的时候从栈顶弹出上一次递归的各项参数。2. 遍历的迭代法2.1 前序遍历前序遍历的迭代顺序为中左右,先遍历中间节点我们将根节点root先入栈,然后出栈,再将右节点入栈,最后左节点入栈由于遍历顺序为中左右,所以入栈要先右后左由于中间节点一定在左右孩子节点访问完之前访问,所以中间节点一定会先于左右节点进行处理。2.2 中序遍历...原创 2021-07-10 17:38:08 · 89 阅读 · 0 评论 -
哈希表-数组&map&set
1. Hash表介绍1.1 Hash映射与碰撞哈希表可以根据关键码的值直接访问值,原理为通过哈希函数,以key值作为输入,计算得到数值,以该数字作为数组的索引下标,从而完成key到value的映射。因为hash表的本质就是一个数组,所以即使hash函数再均匀,也避免不了会发生碰撞。如何解决碰撞?拉链法:发生冲突的元素存储在链表中线性探测法:一旦发生碰撞,就找向下一个空位来放置信息。1.2 常见Hash结构数组set其中红黑树是一种平衡二叉搜索树,key值是有序的,无法原创 2021-04-24 18:26:54 · 226 阅读 · 0 评论 -
数组-二分法&双指针法&滑动窗口
1. 二分法1.1 简介以在数组中插入一个元素为例存在四种情况。通过折半查找的方法确定某个元素在数组当中的位置不过使用折半法的前提是数组中的元素是有序的只要题目给的数组是有序数组,就可以思考是否能用二分法1.2 关键问题在判定条件中,是写while(left <= right)还是while(left < right)【left, right】定义的target是在一个左闭右开还是左闭右闭的区间中。【left, right)...原创 2021-04-23 18:05:46 · 329 阅读 · 0 评论 -
链表-环
1. 环形链表1.1 简介给定一个链表,能够判断该链表中是否存在环如果链表中有环,怎么判断环的入口1.2 关键问题如何判断链表中是否存在环?使用一个fast指针和一个slow指针,fast指针每次可以走多个next节点,而slow指针一次只能进行一次next操作,相对速度为(fast - slow), 即假设slow静止,如果存在环,则fast会不断向slow靠近,二者终究会相见。如果已经判定链表中存在环,则如何查找其入口节点?2*(x + y) = x + y + n*(z +原创 2021-04-22 14:26:10 · 94 阅读 · 0 评论 -
字符串-KMP算法
1. KMP算法1.1 简介KMP定义:三人名字首字母解决的问题:字符串匹配,检查模式串是否存在于主串当中,相比暴力求解复杂度O(m*n),有更好的求解效率有何作用应用:1.2 关键问题next数组前缀表求解求解思路初始化前后缀不同前后缀相同为什么next数组第一个元素的值要改为-1?假设某模式串第一个元素为0,此时匹配到的就是0,当模式串第一个元素和主串中的值不匹配的时候,模式串只可以继续跳转到0位置上继续进行匹配,就形成了一个循环,相当于只有模式串移动原创 2021-04-21 09:33:20 · 120 阅读 · 0 评论