![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 51
山上有只羊M
这个作者很懒,什么都没留下…
展开
-
排序算法
功能(定义):将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列。稳定性:若排序前,Ki=Kj,(i在前,j在后),那么排序之后:若Ki仍在Kj前面,则称排序算法是稳定的;反之,若可能使排序之后的序列中Kj领先于Ki,则称排序算法是不稳定的。分类:按是否涉及内存、外存交换: 排序方法可分为两大类:内部排序和外部排序。 内部排序:在计算机随机存储器中进行...原创 2018-03-17 10:48:45 · 209 阅读 · 0 评论 -
(二叉树)重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路 根据先序遍历,知道当前的根是什么; 根据中序遍历,知道左子树和右子树; 输入当前根,然后递归。代码:/** * Defin...原创 2018-04-14 11:02:17 · 115 阅读 · 0 评论 -
链表
从尾到头打印链表题目描述 输入一个链表,从尾到头打印链表每个节点的值。思路 用递归或者栈来实现代码/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* ...原创 2018-04-14 10:59:10 · 127 阅读 · 0 评论 -
(字符串)替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路: 首先统计空格的个数,确定最终字符串的长度。 然后从后往前,对字符串中的字符一一赋值。程序: void replaceSpace(char *str,int length) { if (...原创 2018-04-14 10:57:05 · 194 阅读 · 0 评论 -
(数组)二维数组中的查找
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路: 设矩阵大小为n*m,(n行m列),将初始坐标定为(n-1,0)(第n行第1列)。大于这个,则列++,否则行–。程序: bool Find(int target, vector<vec...原创 2018-04-14 10:53:19 · 143 阅读 · 0 评论 -
贪心算法
题意:n台机器工作时间为ai,等级bi,m个任务需要时间ai,等级bi,一台机器只能完成一个任务,完成一个任务收益为500*ai+2*bi,求最大收益;(n,m>100000)思路:先从大到小排时间,再从大到小排等级,借助等级数不超过100的条件,使用贪心以确保不超时: 对于每个任务,在满足工作时间大于所需时间的条件下,统计对应等级的机器数量; 当前统计的等级中的机器...原创 2018-04-11 16:53:43 · 149 阅读 · 0 评论 -
一些很巧妙的算法题
数值的整数次方题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。代码 double Power(double base, int exponent) { int n, flag = 1; double res = 1, curr=base; if (exponent ==...原创 2018-04-14 19:10:35 · 1515 阅读 · 0 评论 -
递归和动态规划
斐波那契数列题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39代码class Solution {public: int Fibonacci(int n) { if (n == 1 || n == 2) return 1; //return Fibonacci(n ...原创 2018-04-14 15:20:15 · 292 阅读 · 0 评论 -
查找和排序
旋转数组的最小数字题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路: 折半查找。 如果a[mid]大于a[right],left=mid+1;...原创 2018-04-14 11:22:34 · 132 阅读 · 0 评论 -
海量数据处理方法总结
海量数据处理的主要问题:数据量太大,不能完全加载到内存中处理。三种方法分治 hash映射首先hash映射到不同的小文件。然后在每个小文件中查找想要的数值。Bit_map 位图排序可以极大的缩小空间。每个数用一个bit来表示。比如40亿个整数(4GB(2^32)*64bit)用512M(2^32=512*2^20*8bit)就可以表示了。Bloom Filter...原创 2018-03-31 21:09:45 · 265 阅读 · 0 评论 -
二叉树
二叉树在学习数据结构的时候,除了基本的之外的,还有许多树像是二叉搜索树,2-3树,红黑树等等。也曾经学习过二叉树,以及前序排列中序排列后序排列等等,但是一直无缘使用它!排序有快速排序,归并排序,查找有二分法,甚至直接遍历查找,二叉树的使用很少。那二叉树究竟是干什么的呢?进行了一番粗浅的研究,我们学习的经典二叉树,仅仅当他是一种数据结构是不行的,他还是一种编程思想,例如解决背包问题(...原创 2018-03-14 13:18:32 · 523 阅读 · 0 评论 -
(栈和队列)用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路 stack1用来压入,stack2用来弹出。 压入:直接往stack1压。 弹出:若stack2是空的,就把stack1中的所有弹出然后压入stack2;若不是空的,则不动。然后从stack2弹出一个。代码class Solution{public: void p...原创 2018-04-14 11:10:40 · 144 阅读 · 0 评论