数据结构及算法
文章平均质量分 51
sdr_zd
这个作者很懒,什么都没留下…
展开
-
时间复杂度和两种基础排序
一.认识时间复杂度1.常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。2.时间复杂度:它是常数操作数量的指标,常用O表示。计算方法:在常数操作数量的表达式中,只要高阶项,不要低阶项,也不要系数,剩下的部分如果记为f(N),你们时间复杂度为f(N)*O(1),即O(f(N)); 评价一个算法流程的好坏,最先看的指标是时间复杂度,然后...原创 2018-02-27 15:13:28 · 637 阅读 · 0 评论 -
非递归实现树的前中后序遍历总结 --- Java语言实现
前言三种遍历的递归写法都很好写,所以总结一下非递归写法。先贴一张图复习一下三种遍历方式就进入正文啦~【注:本文所有代码实现中树的结点定义如下:public class Node { int val; Node left; Node right; Node parent; Node() {} Node(int val) { ...原创 2018-09-22 17:00:52 · 3939 阅读 · 3 评论 -
判断一颗树是不是XX树总结 --- Java语言实现
前言写这篇博客的原因是今天去面试了,结果有段时间没刷题【都是借口…好好刷题吧…】让手撕了一个判断是否是一颗完全二叉树的代码,挣扎了挺久还是没有写完整,所以回来整理一下,继续努力!【注:以下所有代码实现中的结点定义如下:public class Node { int val; Node left; Node right; Node parent; No...原创 2018-09-20 00:56:31 · 924 阅读 · 1 评论 -
中缀表达式转后缀表达式并进行计算 原理
在计算一个表达式的时候,可以用数据结构中栈的知识,将我们平常熟悉的中缀表达式转为后缀表达式,再将后缀表达式进行计算得到结果。先说下什么是中缀什么是后缀:中缀表达式:eg: 9+(3-1)*3+10/2,就是我们平常计算时的表达式;后缀表达式:eg: 9 3 1 - 3 * + 10 2 / + ,不包含括号,运算符在两个运算对象后面的表达式。1.中缀表达式转后缀表达式我们先初始化一...原创 2016-08-04 18:01:10 · 4694 阅读 · 0 评论 -
计算器核心算法代码实现(Java)
在进行一个表达式的计算时,先将表达式分割成数字和字符串然后利用出入栈将分割后的表达式进行中缀转后缀,再将后缀表达式进行计算得到结果(思想在上一篇写过)现在贴下Java语言的代码实现。(学习Java时间不长所以可能会有很多不足的地方,我会改进也欢迎大神可以给我一些意见和建议~谢谢啦)我将这部分分成三个方法完成功能,并在getResult方法调用(getResult方法被主方法调用) p...原创 2016-08-06 13:45:36 · 1609 阅读 · 0 评论 -
二叉树的遍历思想及核心代码实现
二叉树在计算机中的存储方式往往线性结构,线性存储分为顺序存储和链式存储,将二叉树按层序编号。顺序结构:按编号的顺序进行存储,对于完全二叉树而言,顺序存储可以反映二叉树的逻辑,但是对于大多数的二叉树则无法反映其逻辑关系,不过可以用 ^ 来代替不存在的结点,但是如果这个树是一个右斜树,就非常浪费存储空间。所以二叉树的存储形式一般为链式存储结构。链式存储:每一个结点都分有一个数据域(data)和...原创 2016-08-15 21:57:51 · 982 阅读 · 0 评论 -
排序算法之堆排思想及代码实现
在介绍堆排序前,我们需要了解一下一种数据结构 —— 顶堆。什么是顶堆?它是一颗完全二叉树,顶堆有大顶堆和小顶堆两种。所谓大顶堆就是在这颗完全二叉树中,任何一颗子树都满足:父结点的值 > 孩子结点的值;小顶堆则相反。 如图: 什么是堆排序(Heapsort)?利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。 ...原创 2018-03-26 22:47:57 · 390 阅读 · 1 评论 -
经典快排思想,以及快排的改进
一.经典快排思想前提条件:给定一个无序数组arr取这个数组最后一个数 num 作为标准,将前面部分的数分为两部分,使得<=num的部分在左边,>num的数在右边;然后将最后一个数和>num部分的第一个数进行交换,就使得原本在数组最后位置的num找到了正确的位置,它的左边都是比它小的以及和它一样的数,右边都是比它大的数回到1,进行递归或迭代,使得所有的数都找到正确的位...原创 2018-03-02 16:50:40 · 2809 阅读 · 0 评论 -
插入排序、归并排序以及小和问题
一.插入排序插入排序的思想了类似于向一个有序的数组里面插入一个数。最初我们将一个无序的数组0~N-1的0~0部分视作有序,然后取1位置的数与0位置上的数进行比较,比0位置上数小就进行交换,比0位置上数大就不变,从而使0~1部分排成有序,以此类推。也就是说,取有序部分后边的数插入到那个有序的部分,将这个数和它前面的数依次进行比较,比前面的数小就进行交换,比前面的数大就已经找到了这个数的位置,直到...原创 2018-02-28 21:55:50 · 1956 阅读 · 2 评论 -
递归的实质以及递归时间复杂度的计算
说到递归,总会提到这么几个问题: 递归和迭代的区别是什么? 答:迭代式调别人,而递归是调自己 递归能不能改为迭代? 答:可以 那么递归的实质是什么?今天就说一下递归的实质1.递归的实质:压系统栈压到栈里的是当前的所有信息,包括当前跑到多少行,当前的参数和函数内的参数变量,等等 返回后再进行弹栈,然后读取弹栈后栈顶空间的信息,也就是返回到调用的地方。 我们也常常会说,递归可能会...原创 2018-02-28 21:02:25 · 1070 阅读 · 0 评论 -
对数器的使用
听左神算法课的时候学到了一个非常有用的东西——对数器 对数器是用来测试代码正确性的,我们在找不到合适的oj系统测试自己的代码时,可以自己写一个对数器对代码进行测试设计对数器的一般步骤为:1.有一个你要测的方法a; 2.实现一个绝对正确即使复杂度不好的方法b; 3.实现一个随机样本产生器; 4.实现比对的方法; 5.把方法a和方法b比对很多次来验证方法a是否正确 6.如果有一个样...原创 2018-02-27 17:21:30 · 3652 阅读 · 0 评论 -
查找不重复无序数组中是否存在两个数字的和为某个值 ---Java语言
今天去某在线教育面试面试官让做的一道题,题目描述如下:给定一个不重复的无序数组arr和一个定值num查找arr中是否有两个数的和等于num有则返回这两个数的下标(可能有多组, 只用返回一组), 没有则返回null很多人一想可能就是两层for循环,我想了很久最后写了双重for循环…【这个代码太easy就不放了】然后面试官说知道哈希吗,由于哈希查找的时间复杂度是O(1),从哈希的角度去考虑,...原创 2018-09-30 00:28:44 · 1946 阅读 · 2 评论