算法练习
晓晨同月
这个作者很懒,什么都没留下…
展开
-
算法练习六:旋转数组的最小数字
#include#includeusing namespace std;/*把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1*//*思路:二分查找的变体,旋转数组可以看成是两个有序数组,只要找到第一个数组的最后一个下标start原创 2015-11-19 21:19:03 · 406 阅读 · 0 评论 -
算法练习二:替换空格
#includeusing namespace std;/*请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:遍历一遍,遇到空格就行相应的替换操作,复杂度O(n*n)*/void replaceSpace(char *str,int length){ if(length <原创 2015-11-19 15:38:17 · 485 阅读 · 0 评论 -
算法练习三:从尾到头打印链表
/*输入一个链表,从尾到头打印链表每个节点的值。 思路1:反转链表,然后输出*//*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/原创 2015-11-19 16:11:33 · 332 阅读 · 0 评论 -
算法练习一:二维数组中的查找
#include#includeusing namespace std;/*在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路:从左下角开始,目标值大则横向增加,小则向上,时间复杂度O(m+n)*/bool Find(vector > myarray,int原创 2015-11-19 14:40:28 · 414 阅读 · 0 评论 -
算法练习四:重建二叉树
#include#include"CommenDefine.h"#includeusing namespace std;/*输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回思路:递归*/stru原创 2015-11-19 19:19:39 · 371 阅读 · 0 评论 -
算法练习五:用两个栈实现队列
#include#includeusing namespace std;/*用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。思路:入栈两次在出去即为队列顺序,将stack2作为出队操作,一旦stack2为空,将stack1中的内容全部入到stack2中,这是为了保证所有元素出队顺序不变*/stack stack1;stack stack2;voi原创 2015-11-19 20:13:55 · 383 阅读 · 0 评论 -
算法练习七--哈夫曼编码C++实现
算法练习七–哈夫曼编码C++实现 好就没写博客了,今天在九度上遇到了个哈夫曼编码的oj题目,实现了下,发现自己大一时视之如恶魔的哈夫曼树的构造如今也能轻易实现了,哇哈哈,特此记一笔 一、哈夫曼树介绍在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码。哈夫曼编码是哈夫曼树的一个应用。哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。 首先原创 2016-03-18 20:11:07 · 15958 阅读 · 0 评论 -
六大排序算法C++实现
六大排序算法C++实现 六大排序包括,冒泡(附加冒泡排序的改进)、选择、插入、堆排序、快排、归并排序,这些排序的定义和优劣这里不赘述,大家可自行查阅其他资料或博客,这里给出他们的C++实现1、冒泡排序/*普通冒泡,从未排序的第一个元素开始,一次和之后的未排序元素比较,若比之后的大,则交换,这样完成最大的元素冒泡到最后,故称为冒泡时间复杂度O(n*n),空间复杂度O(1)*/void m原创 2016-03-19 20:08:16 · 760 阅读 · 0 评论