
数据结构与算法
CalesQ
就读于武汉大学计算机学院。有一颗不断学习、不断向上的心。知识还是得从平时的点滴积累,希望自己可以脚踏实地,稳步前进,比昨天更好。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
内功修炼——树
本文摘要1. 深度优先遍历2. 广度优先遍历3. 前序遍历4. 中序遍历5. 后序遍历写在最后在遇到相关树的时候,无非就会设计到树的遍历。所以一定要记住遍历树的几种方法:1. 深度优先遍历深度优先,简单的说就是看到一条路可以走,就先把这一条路走到底。所以可以使用栈和递归来进行遍历。使用栈(FIFO),就是判断当前结点是否子节点,有的话就把子节点进栈,然后操作。继续出栈,然后继续前面的操作...原创 2020-04-13 22:42:43 · 275 阅读 · 0 评论 -
算法基础——二叉树
本文主要内容一、二叉树的基本遍历及思路1. 先序遍历二叉树(NLR)2. 中序遍历二叉树(LNR)3. 后序遍历二叉树(LRN)二、二叉排序树三、平衡二叉树(AVL)四、B树和B+树一、二叉树的基本遍历及思路1. 先序遍历二叉树(NLR)先访问根节点先序遍历左子树先序遍历右子树public class BTNode { //简化方式 public int data = 0; ...原创 2020-04-13 22:35:50 · 525 阅读 · 1 评论 -
内功修炼——找到target
提示:本文较短这里写目录标题一、什么是找到Target?二、 解决思路写在最后一、什么是找到Target?我们在解决算法问题的时候,可能常常会遇到让我们从一个数组里找和为Target的元素类似的题。例如:leetcode 1 两数和。二、 解决思路所以我们如何解决这个问题呢?当遇到问题时,我们应该也必须先想到的是暴力的方法去解决问题。毕竟我们的目标是解决问题,能够将问题解决后,我们再...原创 2020-04-05 19:41:55 · 207 阅读 · 0 评论 -
内功修炼——接触双指针
一、双指针简介双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。双指针可以从不同的方向向中间逼近也可以朝着同一个方向遍历。变异的双指针有时候,我们能很容易看出来题目是双指针类型的变异,但是直接使用双指针的话又不行。就会不知觉的想到,难道要用三指针?四指针?(饶饶我吧,四指针我也不会啊)。所以这时,我们可以在双指针的基础上使用其他的数据结构,例如说哈希表、数组等。或者是多...原创 2020-04-03 18:59:25 · 189 阅读 · 1 评论 -
内功修炼——动态规划DP
一、DP定义动态规划是把一个大问题拆解成一堆小问题。但是我们知道任何的大问题,应该都可以被分为小问题,又不是所有的问题都可以使用DP来进行解决。所以使用DP与否取决于用DP解决的这些“小问题”会不会被重复调用。通俗的说就是,我能不能用我已经处理过的数据来解决当前问题。这就要求我们得有保存历史记录的地方(用空间换时间)。DP没有递归,有数组,一般是二维,一般数组的最后一个元素就是我们要求...原创 2020-04-03 17:01:08 · 149 阅读 · 0 评论 -
内功修炼——回溯
一、回溯的定义解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:路径:也就是已经做出的选择。选择列表:也就是你当前可以做的选择。结束条件:也就是到达决策树底层,无法再做选择的条件。代码方面,回溯算法的框架:result = []def backtrack(路径, 选择列表): if 满足结束条件: result.add(路径) ...原创 2020-04-03 16:39:09 · 157 阅读 · 0 评论 -
内功修炼——递归 分治
参考文章一、D&C:分而治之,它是一种著名的递归式问题解决方法。步骤:(1)找出基线条件,这种条件必须尽可能简单。相当与递归的终止条件。 在处理列表时,基线条件很可能是空数组或只包含一个元素(2)不断将问题分解(或者说缩小规模),直到符合基线条件1. 自顶向下叫做递归,自底向上叫做递推// 问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总...原创 2020-04-03 12:50:41 · 368 阅读 · 0 评论