每日一道算法题
Urolzeen
这个作者很懒,什么都没留下…
展开
-
每日一道算法题7—— 查找最大(小)的k个元素
http://blog.csdn.net/v_july_v/article/details/6370650http://blog.csdn.net/insistgogo/article/details/7689297下面,我试图用最清晰易懂,最易令人理解的思维或方式阐述有关寻找最小的k个数这个问题(这几天一直在想,除了计数排序外,这题到底还有没有其它的O(n)的算法? )。希望,有任何问题,欢迎不吝转载 2017-03-17 19:24:18 · 1972 阅读 · 0 评论 -
每日一道算法题1 ——把二元查找树转变成排序的双向链表
1.把二元查找树转变成排序的双向链表题目:输入一颗二元查找树,将该二元查找树转变成一个排序的双向链表 要求不能创建任何,只调整指针的指向 转换成双向链表 4=6=8=10=12=14=16答案:#include <iostream>using namespace std;//定义二叉查找树节点数据结构struct BSTreeNode { int m_nValue; /原创 2017-03-13 11:37:35 · 279 阅读 · 0 评论 -
每日一道算法题2——定义一个栈,提供一个返回栈里最小元素方法
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)思路:构建一个辅助栈,每次push一个新元素的时候,同时将最小元素(或最小元素的位置,考虑到栈元素的类型可能是复杂的数据结构,用最小元素的位置将能减少空间消耗)push到赋值栈中;每次pop一个元素出栈的时候,同时pop赋值栈: 参考:#include <deque>#原创 2017-03-13 20:29:25 · 361 阅读 · 0 评论 -
每日一道算法题3——得到数组子数组最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组和中的最大值,要求时间复杂度为O(n)。 分析:时间复杂度为O(n),表明需至多一次循环遍历该数组,遍历该数组时将遍历的元素求和,如果小于0则丢弃当前元素之前的元素,否则就将这个和值累加到最终结果。如果所有元素都小于0,则需找到所有元素中最大的一个元素返回。 参考代码:#in原创 2017-03-14 14:51:20 · 485 阅读 · 0 评论 -
每日一道算法题4——在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。从树的根节点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树 则打印出两条路径:10,12和10,5,7参考代码:#include <iostream>#include <vector>using namespace std;enum TREE_DIR{ LEFT_IN_PARRE原创 2017-03-14 21:10:48 · 367 阅读 · 0 评论 -
每日一道算法题5——翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但每个单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字符一样处理,例如输入 i am a student. 则输出student.a am i分析:由于本题需要翻转句子,先颠倒句子中的所有字符。这时不但翻转了句子中单词的顺序,而且单词内字符也被翻转了。然后再颠倒每个单词内的字符。由于单词内的字符被翻转两次,因此顺序仍然跟输入时的原创 2017-03-15 19:53:15 · 618 阅读 · 0 评论 -
每日一道算法题6——判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11 因此返回true。 如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。 分析转载 2017-03-16 19:57:21 · 454 阅读 · 0 评论