![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 64
HoweFan
这个作者很懒,什么都没留下…
展开
-
双向链表的实现
#includeusing namespace std;#includetypedef int DataType;struct ListNode{DataType _data;ListNode *_next;ListNode *_prev;ListNode(DataType x){_data = x;_next = NULL;_prev = NULL;}};clas原创 2016-05-26 12:27:55 · 213 阅读 · 0 评论 -
平衡二叉树
介绍: AVL树也就是平衡二叉树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。平衡因子: 节点的平衡因子是它的右子树的高度减去它的左子树的高度(有时相反)。带有平衡因子1、0或 -1的节点被认为是平衡的。带有平衡因子 -2或2原创 2016-07-06 21:20:29 · 568 阅读 · 0 评论 -
并查集和(小米面试题)
并查集: 将N个不同的元素分成一组不相交的集合。 开始时,每个元素就是一个集合,然后按规律将两个集合进行合并。 原理: 两个数元素中选择一个元素作为根,让另一个元素对应下表的内容加到第一个元素对应下标的内容中,并把另一个元素下标对应内容变为第一个的元素。 (1)申请一块数组用以标记元素之间的关系 初始化 给定一个关系,用上图进行标记,如果两个元素之间不是同一个的根就把第二个元素当原创 2016-06-20 15:26:27 · 449 阅读 · 0 评论 -
贪心算法
介绍 贪心法,又称贪心算法、贪婪算法、或称贪婪法,是一种在每一步选择中都采取在当前状态 下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。[1]比如在旅行推销员问题中,如果旅行员每次都选择最近的城市,那这就是一种贪心算法。贪心算法在有最优子结构的问题中尤为有效。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决,子问题的最优解能递推到最终问题的最原创 2016-07-23 18:08:37 · 842 阅读 · 0 评论 -
二叉树的后序序列
/****************************************************描述: 输入一个整数数组,判断该数组是不是某个搜索二叉树 的后序遍历。思路: 1、后序遍历中,最后一个节点为根节点。 2、数组可以分为两部分,前面的值比根 节点小,后面的值比根节点大。 3、利用递归的思想,将每个点都作为根 节点来判断,如原创 2016-07-22 20:05:05 · 940 阅读 · 0 评论 -
二分搜索树的实现
#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;template <class K,class V>struct BinarySearchTreeNode{ K _key; V _value; BinarySearchTreeNode<K, V>* _left; Bi原创 2016-06-05 09:53:47 · 357 阅读 · 0 评论 -
数组中重复的数字
问题: 在一个长度为n的数组中,数字的范围为0~n-1,其中的某些数字是重复的,但不知道几个数字重复,也不知道重复了几次,请找出一个重复的数字。方法一: 使用排序(时间复杂度O(nlogn)) 。 方法二 使用哈希表 从头到尾扫描数组,拿到一个数字之后先判断有没有该数字,没有的话就插入有的话就已经找到一个了。(时间复杂度O(原创 2016-06-02 21:29:58 · 253 阅读 · 0 评论 -
排序算啊之选择排序
工作原理: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n - 1次原创 2016-05-27 21:13:56 · 262 阅读 · 0 评论 -
排序算法之插入排序
直接插入排序: 原理: 每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。 1、保存0 2、5,3,2,1分别向后移动一个位置 3、将0放到第一个位置 1、保存4 2、将6,5分别向后移动一个位置 3、将4放到3的后面代码:void InsertSort(int *arr, size_t size){assert(arr)原创 2016-05-27 21:02:50 · 255 阅读 · 0 评论 -
一个数组实现两个栈
题目: 一个数组A[1..n]来实现两个栈,使得两个栈中的元素总和不到n时,两个都不会发生上溯。思路(1): 创建一个数组,分别从两边开始,依次往中间走。650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/80/51/wKiom1c9sFyA1SwoAAAvzZIU5o4673.png" title="捕获.PNG" alt="原创 2016-05-26 12:28:30 · 304 阅读 · 0 评论 -
哈希桶
哈希桶:建一个存放指针的数组,将hash出的key跟数组的下标进行对应,将对应的数据链接到该位置。eg:要存11 22 24 34 54 36 利用模除算出位置:11%10=121%10=124%10=434%10=454%10=436%10=6650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/80/28/wKioL1c5rivy7原创 2016-05-26 12:28:27 · 494 阅读 · 0 评论 -
哈希表的实现
散列表(Hash table,也叫哈希表),是根据关键字(Key value)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。应用: 一个通俗的例子是,为了查找电话簿中某人的号码,可以创建一个按照人名首字母顺序排列的表(即建立人名650) this.wi原创 2016-05-26 12:28:24 · 1085 阅读 · 0 评论 -
c++实现线性表
#define _CRT_SECURE_NO_WARNINGS#includeusing namespace std;typedef int DataType;class SeqList{public: SeqList():_arr(NULL), _size(0), _capacity(0){}SeqList(const SeqList& s):_capacity(s.原创 2016-05-26 12:28:06 · 470 阅读 · 0 评论 -
c语言实现线性表
#define _CRT_SECURE_NO_WARNINGS#include#include#include#define MAX_SIZE 5typedef int DataType;typedef struct Seqlist {DataType arr[MAX_SIZE];size_t size;}Seqlist;void PrintSeqList(Seqlist原创 2016-05-26 12:28:03 · 323 阅读 · 0 评论 -
Jump Game
描述 Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. De原创 2016-07-29 19:15:58 · 287 阅读 · 0 评论