算法和数据结构
小菜鸟要高飞
这个作者很懒,什么都没留下…
展开
-
查找算法(一)顺序表查找
参考: 博客 https://blog.csdn.net/sayhello_world/article/details/77200009 《大话数据结构》顺序表查找分为:顺序查找有序查找折半查找插值查找斐波那契查找线性索引查找 稠密索引查找分块索引查找倒序查找1.顺序查找基本思想:顺序查找是最基本的查找技术,查找过程是:从表中的第一个或者最后一个元素开始,...原创 2018-03-24 20:30:59 · 3399 阅读 · 0 评论 -
平衡二叉树插入旋转
参考自:https://www.cnblogs.com/guyan/archive/2012/09/03/2668399.html 这篇文章中有一些小的错误,这里进行了修改。平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。最小不平衡子树:指离插入节点最近且以平衡因子的绝对值大于1的...转载 2018-04-04 21:37:27 · 773 阅读 · 0 评论 -
红黑树详解
转载自:https://www.imooc.com/article/11715介绍: 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas...转载 2018-04-04 20:37:58 · 401 阅读 · 0 评论 -
多动态图详细讲解二叉搜索树
转载自:https://lufficc.com/blog/binary-search-tree 多动态图详细讲解二叉搜索树 在计算机科学中,二叉搜索树(Binary Search Tree)(有时称为有序或排序的二叉树)是一种能存储特定数据类型的容器。二叉搜索树允许快速查找、添加或者删除某一个节点,并且它是动态的集合。二叉搜索树按照关键字顺序地保存节点,因此查找和其他操作可以使...转载 2018-04-04 19:35:47 · 392 阅读 · 0 评论 -
判断字符串中是否所有字符都只出现过一次
参考:《程序员代码面试指南 IT名企算法与数据结构题目最优解》题目给定一个字符串s,判断s中是否存在所有字符都出现过一次,根据以下两种要求实现不同的函数。要求一:实现时间复杂度为O(N)的方法 要求二:在保证额外空间复杂度为O(1)的前提下,请实现时间复杂度尽量低的方法。解题思路:要求一:时间复杂度为O(N) 遍历一遍s,使用hashmap来记录每种字符穿线的情况,...原创 2018-04-14 15:23:51 · 1508 阅读 · 1 评论 -
排序算法总结(五)——非比较排序
1.基数排序 这里的基数指的是位数:例如对十进制来说,指的是个位、十位、百位。基本思想: (1)首先设置号码为0-9的十个篮子; (2)第一轮将序列的数字按照个位依次放置到对应号码的篮子中,并形成新的排序; (3)第二轮在第一轮排序的基础上,按照十位依次放置到对应号码的篮子中,同样形成新的排序; (4)依次类推,直到没有更好的位数,此时的排序即为最终的排序。 注意在放入篮子中的,不...原创 2018-03-21 17:14:10 · 455 阅读 · 0 评论 -
排序算法总结(四)——归并排序排序
归并排序 归并排序利用了两个有序序列合并的过程; 两个有序序列合并的过程通常为:设置两个指针分别指向两个序列的头部,依次扫描比较两个序列数值的大小,并不断取出较小的值;在比较的过程中,如果其中一个序列为空,则将另一个序列剩余的值全部取出。那么归并排序的基本思想是将无序序列分成两个部分,而这两个部分各自为有序的,再将其按照上诉步骤合并即可。 那在什么情况下才两个部分才能是有序的,当每个部分...原创 2018-03-21 16:19:33 · 282 阅读 · 0 评论 -
排序算法总结(三)——交换排序
1.冒泡排序 基本步骤:依次比较相邻两个元素的大小,如果a[i]>a[i+1],则进行交换;从第一对到最后一对,由此即可将最大元素放置到序列末尾。接着对n-1个元素重复上诉步骤;改进:设置flag标志,如果在一轮循环结束后,没有出现元素交换,则表示该序列已经是排序好的,无需继续进行。代码如下:public class BubbleSort{ public stat...原创 2018-03-21 15:57:44 · 363 阅读 · 0 评论 -
二分查找
1.一般二分查找求元素出现的位置,如果没有则返回-1;int binarySearch(int a[], int key){ int len = a.length; int left = 0; int right = len-1; while(left < right){ int mid = le...原创 2018-04-08 11:47:34 · 215 阅读 · 0 评论 -
排序算法总结(二)——插入排序
1.直接插入排序 基本思想:将无序序列隐式的分成两部分,一部分是有序的,一部分是无序的,通过比较大依次将无序部分中的元素插入在有序部分中的正确位置上。 初始时,有序部分有且仅有一个元素,每次插入后,有序部分元素增加一个,无序部分减少一个。插入排序的关键是如何正确找到插入点。算法步骤: A. 初始时,选择a[0]作为有序部分; B. 将a[1]与a[0]比较,如果a[1]publ...原创 2018-03-21 14:36:36 · 208 阅读 · 0 评论 -
排序算法总结(一)——选择排序
选择排序的基本宗旨就是每次选出剩余元素中最大的或者最小放在最终排序的对应位置。1.直接选择排序 基本思想: 在a[1]-a[n-1]中选择最小的元素和a[0]交换; 在a[2]-a[n-1]中选择最小的元素和a[1]交换; …… 在a[i]-a[n-1]中选择最下的元素和a[i-1]交换; 以此类推。。。。。。算法步骤: 循环比较: 第一轮:将a[0]和a[1]-a[n-1...原创 2018-03-21 13:41:26 · 3589 阅读 · 0 评论 -
深度优先搜索和广度优先搜索
转载自:http://www.cnblogs.com/skywang12345/本章会先对图的深度优先搜索和广度优先搜索进行介绍,然后再给出C/C++/Java的实现。目录 1. 深度优先搜索的图文介绍 1.1 深度优先搜索介绍 1.2 深度优先搜索图解 2. 广度优先搜索的图文介绍 2.1 广度优先搜索介绍 2.2 广度优先搜索图解 3. 搜索算法的源码深度优先...转载 2018-04-07 19:14:52 · 258 阅读 · 0 评论 -
牛客网—网易2019实习生招聘编程题
题目链接:网易2019实习生招聘第一题 牛牛找工作链接:https://www.nowcoder.com/questionTerminal/46e837a4ea9144f5ad2021658cb54c4d为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮...原创 2018-04-06 21:59:18 · 1137 阅读 · 0 评论