数据结构
文章平均质量分 59
看穿数据之美
机器学习/深度学习/数据挖掘/推荐算法,微信为oppo62258801(同13011197941),邮箱为lcqbit11@163.com,欢迎学习交流!
展开
-
leetcode-根据中序遍历和后序遍历重构二叉树 思路与代码
问题描述问题链接:https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/给定树的中序遍历和后序遍历,请构建原来的二叉树。假设不存在重复的元素。Given inorder and postorder traversal of a tree, construct the ...原创 2019-12-04 23:46:08 · 464 阅读 · 0 评论 -
leetcode-根据前序遍历和中序遍历重构二叉树 思路与代码
问题描述问题链接:https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/给定树的前序遍历和中序遍历,请构建原来的二叉树。假设不存在重复的元素。Given preorder and inorder traversal of a tree, construct the bi...原创 2019-12-04 23:45:53 · 334 阅读 · 0 评论 -
leetcode-二叉树的前序、中序、后序、层序的递归和非递归实现
文章目录1. 二叉树的遍历2. 前序遍历2.1. 递归实现2.2. 非递归实现3. 中序遍历3.1. 递归实现3.2. 非递归实现4. 后序遍历4.1. 递归实现4.2. 非递归实现5. 层序遍历1. 二叉树的遍历面试中,尤其是校招面试中(哈哈,社招面试估计是嫌这种题目太简答,不屑于考察),经常被问到的一个题目就是二叉树的各种遍历算法,而我们常见的二叉树的遍历方式有前序遍历、中序遍历、后序遍历...原创 2019-12-02 23:52:13 · 300 阅读 · 0 评论 -
leetcode-数组的全排列的所有结果 思路与代码
文章目录问题描述问题分析问题解法问题描述问题链接:https://leetcode.com/problems/permutations/给定一个不包含重复元素的整数集合,返回全排列的所有结果Given a collection of distinct integers, return all possible permutations.问题分析既然是全排列,首先想到暴力求解法,但是...原创 2019-12-01 20:15:08 · 980 阅读 · 0 评论 -
leetcode-连续子数组和为目标数值的整数倍 思路与代码
文章目录问题描述问题分析问题解法问题描述问题链接:https://leetcode.com/problems/continuous-subarray-sum/给定一个非负数组和一个正数目标值k,请判断数组中是否存在一个连续的子数组,其加和为k的整数倍,即其加和等于n*k,其中n也为一个整数。问题分析拿到这道题目,首先想到的是暴力查找,即列举所有可能的子数组的加和,判断其加和是否为目标值k...原创 2019-12-01 10:21:04 · 1290 阅读 · 0 评论 -
leetcode-给定二叉搜索树和一个目标值,判断树中是否有两元素加和等于目标值 思路与代码
问题描述问题链接:https://leetcode.com/problems/two-sum-iv-input-is-a-bst/给定一个二叉搜索树和一个目标值,如果在树中存在两个元素加和等于目标值则返回true,否则放那会false。Given a Binary Search Tree and a target number, return true if there exist two...原创 2019-11-30 22:22:34 · 975 阅读 · 0 评论 -
leetcode-满足连续子数组加和等于目标值的子数组个数 思路与代码
文章目录问题描述问题分析问题解法问题描述问题链接:https://leetcode.com/problems/subarray-sum-equals-k/给定一个数组,请找到有多少个连续子数组加和等于给定目标数值?问题分析首先想到的是两件事情:两层for循环遍历的解法;两层for循环遍历大概率会出现TLE的错误,哈哈,不是废话嘛因此,我们需要将O(n^2)的解法从时间上优化...原创 2019-11-30 21:37:34 · 4226 阅读 · 0 评论 -
判断二叉树是否是二叉排序树 思路与代码
问题:给定一棵二叉树的根节点 root,请判断其是否是二叉树排序树?二叉排序树的基本概念:如果二叉树根节点的左子树不为空 ,那么左子树的所有节点数值均不大于根节点数值;如果二叉树根节点的右子树不为空 ,那么右子树的所有节点数值均不小于根节点数值;根节点的左子树、右子树也均为二叉排序树。此处需要用到树的遍历,二叉树常用的遍历操作为前序遍历、中序遍历、后续遍历、层序遍历等遍历方式,...原创 2019-11-16 17:12:03 · 2865 阅读 · 0 评论 -
Dijkstra最短路算法
上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”。本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3、4、5、6号顶点的最短路径。 与Floyd-Warshall算法一样这里仍然使用二维数组e来存储顶点之间边的关系,初始值如下。转载 2017-09-26 13:37:13 · 441 阅读 · 0 评论 -
巧妙的邻接表(数组实现)
之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。1234564 51 4 94 3 81 2 52 4 61转载 2017-09-26 14:30:52 · 377 阅读 · 0 评论 -
C++ STL中Map的按Key排序和按Value排序
map是用来存放键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map,其中学生姓名用string类型,作为Key;该学生的成绩用int类型,作为value。这样一来,我们可以根据学生姓名快速的查找到他的成绩。 但是,我们除了希望能够查询某转载 2017-09-10 04:17:33 · 268 阅读 · 0 评论 -
旋转数组的二分查找
来源: http://www.jobcoding.com/array/one-sorted-array/rotate_array/1. 问题描述已知有序数组a[N], 从中间某个位置k(k未知,k=-1表示整个数组有序)分开,然后将前后两部分互换,得到新的数组,在该新数组的查找元素x。如:a[]={1,2,5,7,9,10,15},从k=4分开,得到新数组a={9,转载 2017-09-10 05:16:12 · 468 阅读 · 0 评论 -
C++按map的value进行排序
C++中,map是按key值大小排序存储。有时候,我们需要对map的value进行排序,根据value的大小顺序获得key的序列。比较简单的方法就是,重新定义一个新的map,新map的key和value正好是原来map的value和key,这样新的map就按照原来map的value值进行排序。不过这种方法,要是原来的map的value值没有重复的话,是正确的,因为map的key值是无重复的。比较正转载 2017-09-18 16:05:40 · 3935 阅读 · 0 评论 -
10G数据量,只有2G内存,怎样找到中位数?
链接:http://blog.sina.com.cn/s/blog_62714d6a0100m96m.html文件中有10G个整数,乱序排列,要求找出中位数 (2010-09-25 18:15:03)转载▼标签: 杂谈分类: 算法 题目:在一个文件中有 10G 个整数转载 2017-10-20 16:20:38 · 3949 阅读 · 0 评论 -
动态规划 最长公共子序列
1.基本概念 首先需要科普一下,最长公共子序列(longest common sequence)和最长公共子串(longest common substring)不是一回事儿。什么是子序列呢?即一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果。什么是子串呢?给定串中任意个连续的字符组成的子序列称为该串的子串。给一个图再解释一下:转载 2017-10-21 20:39:54 · 380 阅读 · 0 评论 -
判断树是否为平衡二叉树
bool IsBalanced(BinaryTreeNode* pRoot, int* depth) { if(pRoot== NULL) { *depth = 0; return true; } int nLeftDepth,nRightDepth; bool bLef转载 2017-11-14 11:09:39 · 425 阅读 · 0 评论 -
为什么样本方差里面要除以(n-1)而不是n,是如何计算的?
我们在计算方差时,通常会认为是除以(n),但是实际上,除以(n-1)才是正确的结果,因为除以(n-1)得到的方差估计量才是关于总体方差的无偏估计量。直接上推导过程如下:如上可以明白除以(n-1),而不是除以(n),到底是怎么来的。之后我会介绍为什么看上去,除以(n-1)计算得到的方差估计量更接近总体的方差的无偏估计...原创 2019-03-06 23:03:01 · 15021 阅读 · 1 评论 -
LeetCode--279. Perfect Squares(完美平方)Python
题目:给定一个正整数n,一定存在若干整数平方和为该正整数,求满足该条件的最小整数个数。平方数为(1,4,9,16......),使其和为n。例如给定n=12,则返回3,因为12=4+4+4;给定n=13,则返回2,因为13=4+9.解题思路:1、使用动态规划,维护一个长度为n+1的数组,第i位存储和为i的最少整数个数。则f(i)只与i之前的数组有关。2、变态解法(四平方和定理),任...转载 2019-06-17 22:45:47 · 520 阅读 · 0 评论 -
理解插入排序-直接插入排序、折半插入排序、希尔排序的排序过程
1,有关插入排序(1)插入排序的基本方法是:每步将一个待排序的元素,按其排序码大小插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止。(2)可以选择不同的方法在已经排好序的有序数据表中寻找插入位置,依据查找方法的不同,有多种插入排序方法。下面是常用的三种。1>直接插入排序2>折半插入排序3>希尔排序(3)直接插入排序基本思想:当插入第i(i...转载 2019-06-29 00:20:23 · 1233 阅读 · 1 评论 -
交换两个数的值的四种方法
交换两个数的值时,大致分为两种思路,建立临时变量和不建立临时变量,这里我们按照是否建立临时变量来写。一、建立临时变量<1>、一般方法思路:建立临时变量 tmp ,通过 tmp = a; a = b; b = tmp; 来实现。图解:(以 a = 1; b = 2 为例) ...转载 2019-06-29 12:55:30 · 16571 阅读 · 3 评论 -
表达式求值:从“加减”到“带括号的加减乘除”的实践过程
本文乃Siliphen原创,转载请注明出处:http://blog.csdn.NET/stevenkylelee ● 为什么想做一个表达式求值的程序 最近有一个需求,策划想设置游戏关卡的某些数值,这个数值不是一个常量,而是根据关卡的某些环境数据套上一个计算表达式算出来的。这个需求无法用excel拖表预计算出,因为关卡的环境数据只有在游戏中才能产生,在excel制转载 2017-04-01 16:56:06 · 2615 阅读 · 0 评论 -
数据结构:图的存储结构之邻接表
对于图来说,邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构是存在对存储空间的极大浪费的。因此我们考虑另外一种存储结构方式:邻接表(Adjacency List),即数组与链表相结合的存储方法。邻接表的处理方法是这样的。1、图中顶点用一个一维数组存储,另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。转载 2017-09-25 23:28:07 · 492 阅读 · 0 评论 -
C++中的C_str()函数用法
语法: const char *c_str();c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样: cha转载 2017-09-25 12:24:28 · 829 阅读 · 0 评论 -
C++ vector和list的区别
1.vector数据结构vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。另外,当数组中内存空间不够时,会重新申请一块内存空间并进行内存拷贝。2.list数据结构list是由双向链表实现的,因此内存空间是不连续转载 2017-08-30 22:57:04 · 250 阅读 · 0 评论 -
教你彻底学会动态规划——入门篇
动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当自己做题的时候又会觉得无所适从。我觉得,理解算法最重要的还是在于练习,只有通过自己练习,才可以更快地提升。话不多说,接下来,下面我就通过一个转载 2017-07-24 21:08:57 · 366 阅读 · 0 评论 -
typedef struct与struct的区别
1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。转载 2017-07-22 13:01:55 · 335 阅读 · 0 评论 -
给定一个字符串,按单词将该字符串逆序。
[cpp] view plain copy/************************************************* 题目: 给定一个字符串,按单词将该字符串逆序。 如输入"hello world",输出为"world hello"。 ***********************************************转载 2017-04-02 10:26:53 · 2266 阅读 · 0 评论 -
静态局部变量(static)用法
有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保留上一次函数调用结束时的值。这时就应该指定该局部变量为静态局部变量(static local variable)。 例 静态局部变量的值。 #include using namespace std; int f(int a)转载 2017-04-02 09:31:47 · 8055 阅读 · 0 评论 -
C++ string的trim, split方法
很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能。但是C++string也提供很强大的功能,实现trim这种功能也不难。下面是几种方法: 1.使用string的find_first_not_of,和find_last_not_of方法[cpp] view plain copy转载 2017-04-07 16:07:47 · 21778 阅读 · 0 评论 -
stderr和stdout详细解说
cstdio>objectstderrFILE * stderr;Standard error streamThe standard error stream is the defaultdestination for error messages and other diagnostic warnings. Like stdout, itis usuall转载 2017-04-07 14:56:04 · 28739 阅读 · 2 评论 -
数据结构:图的存储结构之邻接表
对于图来说,邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构是存在对存储空间的极大浪费的。因此我们考虑另外一种存储结构方式:邻接表(Adjacency List),即数组与链表相结合的存储方法。邻接表的处理方法是这样的。1、图中顶点用一个一维数组存储,另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。转载 2017-04-07 14:09:30 · 627 阅读 · 0 评论 -
数据结构与算法目录
前言:数据结构与算法系列先看这里,有助于你更好地获取内容。首先明白一个问题:为什么要研究数据结构? 这是因为所有的程序本质上是对数据进行处理,如何高效的处理数据,这依赖于数据本身的结构(如类型(整型、浮点型等)、维数、是否为复杂类型(结构体类型、类类型)等)以及数据之间的逻辑关系(线性、非线性等)。我们所学的数据结构这门课程就是研究这些内容的,只有弄清楚了这些,我们才可以用高效的转载 2016-12-01 17:45:41 · 666 阅读 · 0 评论 -
数据结构:循环队列(C语言实现)
版权声明:本文为博主原创文章,未经博主允许不得转载。生活中有很多队列的影子,比如打饭排队,买火车票排队问题等,可以说与时间相关的问题,一般都会涉及到队列问题;从生活中,可以抽象出队列的概念,队列就是一个能够实现“先进先出”的存储结构。队列分为链式队列和静态队列;静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费;链式队列是用链表来实现队列的。这里讲的是循转载 2017-08-15 03:19:02 · 512 阅读 · 0 评论 -
C++学习:list容器详解
list容器详解 首先说说STL STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。转载 2017-08-22 13:42:16 · 337 阅读 · 0 评论 -
【C++】fill函数,fill与memset函数的区别
【C++】fill函数,fill与memset函数的区别memset函数按照字节填充某字符在头文件里面fill函数按照单元赋值,将一个区间的元素都赋同一个值在头文件里面因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能。因为只有000转载 2017-08-27 14:23:37 · 425 阅读 · 0 评论 -
C++STL中全排列函数next_permutation的使用
next_permutation函数 组合数学中经常用到排列,这里介绍一个计算序列全排列的函数:next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。至于这里的“前一个”和“后一个”,我们可以把它理解为序列的字典序的前后,转载 2017-08-30 18:47:41 · 506 阅读 · 0 评论 -
Trie树(Prefix Tree)介绍
目录(?)[-]一什么是Trie树二Trie树的优缺点优点缺点三Trie树的应用字符串检索词频统计字符串排序前缀匹配作为其他数据结构和算法的辅助结构四Trie树的实现本文用尽量简洁的语言介绍一种树形数据结构 —— Trie树。一、什么是Trie树Trie树,又叫字典树、前缀树(Prefix Tree)、单词查找树 或 键树,是转载 2017-09-23 20:13:59 · 579 阅读 · 0 评论 -
c++stl中reverse
目录(?)[-]看到有人将int型指针传入reverse函数中长知识了reverse参考看到有人将int型指针传入reverse函数中,长知识了。reverseVisual Studio 2013其他版本此主题尚未评级 - 评价此主题反转元素的顺序在范围内。转载 2017-09-23 15:03:20 · 1136 阅读 · 0 评论 -
Trie树详解及其应用
一、知识简介 最近在看字符串算法了,其中字典树、AC自动机和后缀树的应用是最广泛的了,下面将会重点介绍下这几个算法的应用。 字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不过 Trie 的 key 只能是字符串。 Trie 的强大之处就在于它的时间复杂度。它的插入和转载 2017-09-22 17:52:35 · 259 阅读 · 0 评论 -
全排列 递归方法与非递归方法实现
版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[-]一全排列的递归实现二去掉重复的全排列的递归实现三全排列的非递归实现全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学转载 2017-09-06 20:56:55 · 435 阅读 · 0 评论