
数据结构
Lindsay.Lu丶
- find more, find yourself. -
展开
-
Hash树(散列树)和Trie树(字典树、前缀树)
1.Hash树理想的情况是希望不经过任何比较,一次存取便能得到所查的记录,那就必须在记的存储位置和它的关键字之间建立一个确定的对应关系f,使每个关键字和一个唯一的存储位置相对应。因而在查找时,只要根据这个对应关系f找到给定值K的像f(K)。由此,不需要进行比较便可直接取得所查记录。在此,我们称这个对应关系为哈希(Hash)函数,按这个思想建立的表为哈希表。在哈希表中对于不同的关键字可能得到同一哈希地址,这种现象称做冲突。在一般情况下,冲突只能尽可能地减少,而不能完全避免。因为哈希函数是从关键字集合到地转载 2020-10-23 08:56:49 · 1001 阅读 · 1 评论 -
算法与数据结构*
学习方法:chunk it up、deliberate practicing、feedback切题四件套:Clarification、Possible solutions、Coding、Test cases数组 链表 队列 栈 堆 哈希表 树 二叉查找树 字母树 LRU缓存 递归 贪心 分治 广度优先搜索 深度优先搜索...原创 2020-06-14 11:25:07 · 197 阅读 · 0 评论 -
C++ STL之vector用法总结
介绍vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后转载 2017-10-22 11:51:34 · 495 阅读 · 0 评论 -
【LeetCode】BinaryTreeLevelOrderTraversal_ii 二叉树的层次遍历 II
二叉树的层次遍历 II 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)样例给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7按照从下往上的层次遍历为:[ [15,7], [9,20], [3]]标签 队列 二叉树 二叉树遍历 宽原创 2017-10-22 14:40:48 · 254 阅读 · 0 评论 -
【LeetCode】Invert Binary Tree 翻转二叉树 - Easy++
翻转一棵二叉树样例 1 1 / \ / \2 3 => 3 2 / \ 4 4挑战 递归固然可行,能否写个非递归的?(1)Java//Version 1 : Recursionpublic class InvertBinaryTree { /* * @param root: a TreeNod原创 2017-10-22 16:08:44 · 297 阅读 · 0 评论 -
【LeetCode】Binary Tree Preorder Traversal 二叉树的前序遍历(3种方法)- Easy+
二叉树的前序遍历 给出一棵二叉树,返回其节点值的前序遍历。样例 给出一棵二叉树 {1,#,2,3},1 \ 2 / 3 返回 [1,2,3].挑战 你能使用非递归实现么?3种方法:非递归、递归、分治(1)Java/** * Definition of TreeNode: * public class TreeNode { * pub原创 2017-10-16 07:56:15 · 308 阅读 · 0 评论 -
【LeetCode】Binary Tree Inorder Traversal二叉树的中序遍历 - Easy
二叉树的中序遍历 给出一棵二叉树,返回其中序遍历样例 给出二叉树 {1,#,2,3},1 \ 2 / 3 返回 [1,3,2].挑战 你能使用非递归算法来实现么?(1)Javapackage BinaryTreeTraversal;import java.util.ArrayList;import java.util.List;import j原创 2017-10-16 09:18:32 · 341 阅读 · 0 评论 -
【数据结构】面试搞定二叉树大总结-15道二叉树题
感谢以下文章的作者:BIN大神的大总结:http://blog.youkuaiyun.com/fightforyourdream/article/details/16843303 面试大总结之二:Java搞定面试中的二叉树题目以及:http://blog.youkuaiyun.com/luckyxiaoqiang/article/details/7518888转载 2017-10-16 09:22:39 · 387 阅读 · 0 评论 -
【LeetCode】Validate Binary Search Tree 验证二叉查找树 - Medium+
验证二叉查找树 给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。 节点的右子树中的值要严格大于该节点的值。 左右子树也必须是二叉查找树。 一个节点的树也是二叉查找树。样例一个例子: 2 / \1 4 / \ 3 5上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.标签 分治法 二叉树 递归原创 2017-10-25 00:54:28 · 762 阅读 · 0 评论 -
【LeetCode】Binary Tree Zigzag Level Order Traversal 二叉树的锯齿形层次遍历 - Medium(LinkedIn)
二叉树的锯齿形层次遍历 给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 样例给出一棵二叉树 {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15 7返回其锯齿形的层次遍历为:[ [3], [20,9], [15,7]]标签 队列 领英 二叉树 二叉树遍历 宽度优先搜索(1原创 2017-10-25 00:58:58 · 356 阅读 · 0 评论 -
【LeetCode】图的连通分量(并查集)
求连通分量/城市个数:(如下图 找根结点,画正字) C++ : #include <iostream>#include <cstdio>#include <cstdlib>#include <memory.h>using namespace std;//查找图的联通分量class UnionFindSet {private: int m_nN; int* m_pParen原创 2017-12-20 00:55:46 · 1756 阅读 · 0 评论 -
【LeetCode】N-Queens N皇后 - Medium
n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。 给定一个整数n,返回所有不同的n皇后问题的解决方案。 每个解决方案包含一个明确的n皇后放置布局,其中”Q”和”.”分别表示一个女王和一个空位置。样例 对于4皇后问题存在两种解决的方案: [ [“.Q..”, // Solution 1 “…Q”, “Q…”, “..Q....原创 2018-03-07 15:40:43 · 214 阅读 · 0 评论 -
【LeetCode】 Find Minimum In Rotated Sorted Array_II(BinarySearch) - Medium
寻找旋转排序数组中的最小值 II 假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。 你需要找到其中最小的元素。 数组中可能存在重复的元素。样例 给出[4,4,5,6,7,0,1,2] 返回 0 标签 二分法 分治法 相关题目 中等寻找旋转排序数组中的最小值 39 % 中等搜索旋转排序数组 II 40...原创 2018-02-28 20:23:08 · 210 阅读 · 0 评论 -
【LeetCode】搜索二维矩阵 Search a 2D Matrix - Easy
写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性: - 每行中的整数从左到右是排序的。 - 每行的第一个数大于上一行的最后一个整数。 样例 考虑下列矩阵: [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出 target = 3,返回 true 挑战 O(log(n) ...原创 2018-02-28 22:28:54 · 259 阅读 · 0 评论 -
【LeetCode】搜索二维矩阵2 Search a 2D Matrix II - Medium
写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。 这个矩阵具有以下特性: ” 每行中的整数从左到右是排序的。 ” 每一列的整数从上到下是排序的。 ” 在每一行或每一列中没有重复的整数。 样例 考虑下列矩阵: [ [1, 3, 5, 7], [2, 4, 7, 8], [3, 5, 9, 10] ] 给出target = 3...原创 2018-02-28 22:34:21 · 221 阅读 · 0 评论 -
【数据结构面试】按接口实现队列
interface InterfaceQueue { void push(int val); // define an interface for pop method /* write your code here */ // define an interface for top method /* write your code here */}publi原创 2017-10-22 10:03:31 · 388 阅读 · 0 评论 -
【LeetCode】Minimum Depth Of Binary Tree二叉树的最小深度 - Easy
二叉树的最小深度 给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2标签 二叉树 深度优先搜索(1)Javapackage BinaryTree;import java.uti原创 2017-10-21 19:49:31 · 243 阅读 · 0 评论 -
【LeetCode】Min Stack带最小值操作的栈 - Medium ++
带最小值操作的栈 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。注意事项 如果堆栈中没有数字则不能进行min方法的调用样例 如下操作:push(1),pop(),push(2),push(3),min(), push(1),min() 返回 1,2,1标签 栈 相关题目 中原创 2017-09-23 21:57:29 · 485 阅读 · 0 评论 -
【数据结构】顺序表、单链表的 比较+总结
(优缺点文字部分转自: http://blog.youkuaiyun.com/zhang_minli/article/details/50489996)顺序表和链表de优缺点顺序表的优点方法简单,各种高级语言中都有数组,容易实现。 不用为表示结点间的逻辑关系而增加额外的存储开销(链表要增加额外的指针域)。 顺序表具有按元素序号随机访问的特点。缺点 在顺序表中做插入删除操作时,平均移动大约表中一般的元素,因原创 2017-09-17 08:04:34 · 1728 阅读 · 0 评论 -
【数据结构】单链表逆序
2、 单链表逆序 第二个题目是很经典的“单链表逆序”问题。很多公司的面试题库中都有这道题,有的公司明确题目要求不能使用额外的节点存储空间,有的没有明确说明,但是如果面试者使用了额外的节点存储空间做中转,会得到一个比较低的分数。如何在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我们先用迭代循环的思想来分析这个问题,链表的初始状态如图(1)所示:图(1转载 2017-09-15 21:37:34 · 22948 阅读 · 5 评论 -
【数据结构】链表:多项式加法
*问题描述:用单链表存储一元多项式,并实现两个多项式的加法。提示: 1、存储多项式的数据结构 多项式的通式是p n (x)=a n x n +a n−1 x n−1 +…+a 1 x+a 0 。n次多项式共有n+1项。 直观地,可以定义一个数组来存储这n+1个系数。以多项式p(x)=−3.4x 10 −9.6x 8 +7.2x 2 +x 为例,存储这个多项式的数组如下图转载 2017-09-15 19:41:38 · 2002 阅读 · 0 评论 -
【LeetCode】Partition List 链表划分 - Easy +
Partition List 链表划分 Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x. You should preserve the original relative order of th原创 2017-09-05 07:05:37 · 492 阅读 · 0 评论 -
【数据结构】 MergeSort与QuickSort的详细分析 - 归并排序、快速排序
转自:http://blog.youkuaiyun.com/qt_pixie/article/details/1361777 MergeSort和QuickSort是两种比较类似的sort方式,他们都是通过Divide and Conquer来实现的。都需要使用recursion的方式进行排序。他们的相同之处在于原理上一致。首先要做的是split,将N个element分成两部分进行排序,每一部分也会再继续分转载 2017-09-17 10:40:31 · 739 阅读 · 0 评论 -
【LeetCode】Sort List 链表排序- Medium ++(Merge&Quick Sort)
链表排序 (升序排列) 在 O(n log n) 时间复杂度和常数级的空间复杂度下给链表排序。样例 给出 1->3->2->null,给它排序变成 1->2->3->null.挑战 分别用归并排序和快速排序做一遍。以下为归并排序的Java实现。public class Solution{ private ListNode findMiddle(ListNode head){原创 2017-09-18 00:31:43 · 441 阅读 · 0 评论 -
【LeetCode】Binary Tree Maximum Path Sum二叉树中的最大路径和 - Medium
二叉树中的最大路径和 给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和)样例 给出一棵二叉树: 1 / \ 2 3返回 6标签 动态规划 分治法 递归package BinaryTreeMaximumPathSum;import BinaryTree.TreeNode;public class Binar原创 2017-10-17 18:25:53 · 314 阅读 · 0 评论 -
【数据结构】特殊矩阵的压缩存储1——对称矩阵
对于一个矩阵结构显然用一个二维数组来表示是非常恰当的,但在有些情况下,比如常见的一些特殊矩阵,如三角矩阵、对称矩阵、带状矩阵、稀疏矩阵等,从节约存储空间的角度考虑,这种存储是不太合适的。下面从这一角度来考虑这些特殊矩阵的存储方法。对称矩阵的特点是:在一个n 阶方阵中,有aij=aji ,其中1≤i , j≤n,如图5.5 所示是一个5阶对称矩阵。对称矩阵关于主对角线对称,因此只需存储上三角转载 2017-10-10 01:15:07 · 1349 阅读 · 0 评论 -
【数据结构】特殊矩阵的压缩存储2——稀疏矩阵
为了节省存储空间并且加快处理速度,需要对这类矩阵进行压缩存储,压缩存储的原则是:不重复存储相同元素;不存储零值元素。一、相关概念㈠特殊矩阵:矩阵中存在大多数值相同的元,或非0元,且在矩阵中的分布有一定规律。⒈对称矩阵:矩阵中的元素满足 aij=aji 1≤i,j≤n⒉三角矩阵:上(下)三角矩阵指矩阵的下(上)三角(不转载 2017-10-10 01:18:38 · 923 阅读 · 0 评论 -
【数据结构】二叉树前序、中序、后序遍历相互求法
根据前序、中序遍历,直接计算后序遍历的二叉树。(绕过生成二叉树的过程)/** 根据前序、中序遍历,直接计算后序遍历的二叉树。(绕过生成二叉树的过程) nLength: ①(首次)前序/中序遍历的char[](存放二叉树的数组)的长度 ②递归中:上一次遍历到的位置下标。0~nLength-1也就是上一次确认为根的左子树下标 nInde原创 2017-10-28 17:39:01 · 1122 阅读 · 0 评论 -
【LeetCode】Construct Binary Tree From Inorder And Postorder Traversal 中序遍历和后序遍历树构造二叉树 - Medium
根据前序遍历和中序遍历树构造二叉树.注意事项 你可以假设树中不存在相同数值的节点样例给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \1 3(1)Javapublic class Solution { /* * @param inorder: A list of integers that inorder traversal of原创 2017-10-28 17:25:23 · 293 阅读 · 0 评论 -
【LeetCode】Binary Tree Postorder Traversal 二叉树的后序遍历 - Easy
样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [3,2,1] 挑战 你能使用非递归实现么?(1)Java(1)递归版//Version1: Recursion ①public class BinaryTreePostorderTraverse { /* * @param root: A Tree原创 2017-10-21 14:55:32 · 250 阅读 · 0 评论 -
【LeetCode】 Maximum Depth of Binary Tree 二叉树的最大深度 - Easy
二叉树的最大深度 描述 笔记 数据 评测 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.标签 分治法 二叉树 递归 优步(1)Javaimport BinaryTree.TreeNode;// Version 1: Divide Conqu原创 2017-10-21 15:24:10 · 235 阅读 · 0 评论 -
【LeetCode】 Implement Queue by Two Stacks用栈实现队列 - Medium
用(双)栈实现队列正如标题所述,你需要使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。pop和top方法都应该返回第一个元素的值。样例 比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2挑战 仅使用两个栈来实现它,不使用任何其他数原创 2017-09-23 21:40:48 · 293 阅读 · 0 评论