随笔分类 -  数据结构与算法

摘要:前言 掌握好数据结构是我们学习算法的基础。例如基本的数组、链表、二叉树、堆、栈到复杂的图等等。今天我们就来分析一下红黑树是一种怎么样的结构。 基本概念 红黑树是一种自平衡二叉查找树。这里涉及到了几个概念:平衡、二叉、查找。 二叉树:由不同的节点组成,每一个节点有左子节点和右子节点,一个节点最多两个子 阅读全文
posted @ 2020-06-07 10:34 挣扎一下 阅读(214) 评论(0) 推荐(0)
摘要:题目描述 反转单向链表 解题思路 很简单面试很常问的题目。解法有两种,递归法和头插法。 递归法:先将头结点反转,头结点的next指向null,再将头结点的下一个节点链表反转,最后头结点的下一个节点指向头结点。 头插法:构造一个虚拟的头结点,将链表的每一个节点插入到dummy节点的next节点,最后返 阅读全文
posted @ 2020-05-13 21:07 挣扎一下 阅读(211) 评论(0) 推荐(0)
摘要:概念 二叉树从上至下逐层遍历 例如: 该二叉树的层次遍历结果是3、9、20、15、7。 核心点 层次遍历联想到辅助队列,先进先出,从上至下遍历。 阅读全文
posted @ 2020-05-13 00:57 挣扎一下 阅读(826) 评论(0) 推荐(0)
摘要:题目描述 输入一个整数,输出该数二进制中表示1的个数 解题思路 利用技巧 n&(n-1),该位运算去除n的位级表示中最低的那一位。 n :10110100 n-1 :10110011 n&(n-1) :10110000 时间复杂度O(M),其中M表示1的个数。 代码 public int Numbe 阅读全文
posted @ 2020-05-10 19:09 挣扎一下 阅读(190) 评论(0) 推荐(0)
摘要:题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 解题思路 递归 如果该二叉树的左子树不为空,则左子树上所有节点的值均小于它的根节点的 阅读全文
posted @ 2020-05-08 00:52 挣扎一下 阅读(278) 评论(0) 推荐(0)
摘要:题目描述 用栈来实现队列,完成队列的Push和Pop操作。 解题思路 队列是先进先出,栈是先进后出,我们需要两个栈,in栈用来处理入栈(push)操作,out栈用来处理出栈(pop)操作。一个元素进入in栈以后,出栈的顺序被反转。当元素要出栈时, 需要先进入out栈,此时元素出栈的顺序再一次被反转, 阅读全文
posted @ 2020-05-05 23:38 挣扎一下 阅读(188) 评论(0) 推荐(0)
摘要:题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子 结点,同时包含指向父结点的指针。 public class TreeLinkNode { int value; TreeLinkNode left = null; TreeLinkNod 阅读全文
posted @ 2020-05-03 23:29 挣扎一下 阅读(113) 评论(0) 推荐(0)
摘要:题目描述 根据二叉树的前序遍历和中序遍历的结构,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不包含重复的数字 解题思路 前序遍历的第一个值为根节点的值,使用这个值将中序遍历结果分成两部分,左部分分为树的左子树中序遍历结果,右部分为树的右子树中序遍历结果。 代码 static class T 阅读全文
posted @ 2020-05-02 23:57 挣扎一下 阅读(145) 评论(0) 推荐(0)
摘要:题目描述 从尾到头反过来打印出单向链表每个结点的值 Input: 1 -> 2 -> 3 Output: 3,2,1 解题思路 ####使用递归 要逆序打印链表,1->2->3,可以先逆序打印链表2->3,再打印1。而2->3可以看成一个新的链表,要逆序打印链表可以继续使用求解函数,也就是在求解函数 阅读全文
posted @ 2020-05-01 14:27 挣扎一下 阅读(125) 评论(0) 推荐(0)
摘要:题目描述 将一个字符串中的空格替换成"%20" Input: "A B" Output: "A%20B" 解题思路 先算出字符串替换后的总长度,在字符串尾部填充任意字符,使得字符串的长度等于替换后的长度。 令P1指向字符串原来末尾位置,P2指向字符串现在末尾位置。P1,P2从后往前遍历,若P1的字符 阅读全文
posted @ 2020-05-01 09:54 挣扎一下 阅读(143) 评论(0) 推荐(0)
摘要:###题目描述 给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。 Consider the following matrix: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22 阅读全文
posted @ 2020-04-30 08:45 挣扎一下 阅读(176) 评论(0) 推荐(0)
摘要:###题目描述 在一个长度为 n 的数组里的所有数字都在 0 到n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 Input: {2, 3, 1, 0, 2, 5} Output: 2 ###解题思路 对于这种数组元素在 阅读全文
posted @ 2020-04-29 23:44 挣扎一下 阅读(226) 评论(0) 推荐(0)