算法
文章平均质量分 68
Mark_Melon
分享可以让自己变得更强
展开
-
中缀表达式求值问题
中缀表达式的求值问题是一个比较常见的问题之一,我们通常在编写程序时,直接写出表达式让编译器去处理,很少去关心编译器是怎么对表达式进行求值的,今天我们来一起了解一下其中具体的原理和过程。 表达式一般来说有三种:前缀表达式、中缀表达式、后缀表达式,其中后缀表达式又叫做逆波兰表达式。中缀表达式是最符合人们思维方式的一种表达式,顾名思义,就是操作符在操作数的中间。而前缀表达式和后缀表达式中操作符分别转载 2016-09-23 11:15:29 · 3211 阅读 · 2 评论 -
扑克牌顺子
把每一件简单的事情做的完美,你就是伟大的。在牛客上看到这样一道题:题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,原创 2016-12-20 17:11:01 · 312 阅读 · 0 评论 -
机器人的运动范围
牛客上看到这样一道题:题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?解题思原创 2017-01-06 17:01:24 · 295 阅读 · 0 评论 -
矩阵中的路径
在牛客上看到这样一道题:题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb原创 2017-01-06 16:39:56 · 339 阅读 · 0 评论 -
滑动窗口的最大值
牛客上看到这样一道题:题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1},原创 2017-01-06 11:36:12 · 311 阅读 · 0 评论 -
数据流中的中位数
在牛客上看到这样一道题:题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。解题思路:可能看到这道题的第一反应是,这没什么难度呀,题目都说了用排序了,时间复杂度nlogn,如果这么简单的话,这题就没什么必要出了。对于这种找出很原创 2017-01-05 17:56:43 · 354 阅读 · 0 评论 -
链表中环的入口结点
牛客上看到这样一道题:题目描述一个链表中包含环,请找出该链表的环的入口结点。思路分析:链表中有环的题目似乎也算是一个非常经典的面试笔试题了,也是很多人喜欢问到的, 这道题其实有很多思路 思路一:我的第一反应是用map或者set,遍历链表,把每一个节点映射到map中或者添加到set中,当要添加的节 点在map或者set中已经存在的时候原创 2016-12-28 14:25:30 · 684 阅读 · 0 评论 -
剑指offer面试题:正则表达式匹配
转载自:http://www.cnblogs.com/AndyJee/p/4700373.html题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"转载 2016-12-27 17:23:28 · 268 阅读 · 0 评论 -
数组中的重复数字
牛客上的题目,参考剑指offer,转载自:http://www.cnblogs.com/AndyJee/p/4693099.html题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的转载 2016-12-26 18:06:28 · 265 阅读 · 0 评论 -
求和为S的所有连续正数数列
今天在牛客上看到一道题:题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描原创 2016-12-15 17:50:27 · 554 阅读 · 0 评论 -
字符串循环左移
伟大在于把简单的事情做的完美在牛客上看到这样一道题:题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它解题思路:看到牛客讨原创 2016-12-16 11:28:21 · 703 阅读 · 1 评论 -
求递增序列中和为S的乘积最小的两个数
不要小看每一道简单的题,把细节做好,把每一道简单的题做的漂亮,这就是一种能力。牛客上有这样一道题:题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述:对应每个测试案例,输出两个数,小的先输出解题思路:定义两个指针start=0,end=array.length原创 2016-12-16 10:58:28 · 638 阅读 · 0 评论 -
带有重复元素的有序数组二分查找
在牛客上看到这样一道题:题目描述统计一个数字在排序数组中出现的次数。 一般首先会想到顺序遍历一遍,时间复杂度o(n),如果这么简单,这道题就没什么必要出了。 其实这道题也很容易想到二分查找,时间复杂度为o(logn),但是二分查找需要注意一个细节,就是当遇到重复元素时,让mid指针跳过所有重复元素,这也是很多粗心的小伙伴非常容易忽略的,也是很多面试官喜原创 2016-12-07 16:52:53 · 7368 阅读 · 0 评论 -
数组中的逆序对
在牛客网上看到这样一道题:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述:题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size 对于%75的数据,size 对于%100的数据,size输入原创 2016-12-07 14:27:13 · 796 阅读 · 0 评论 -
几个常用字符串hash算法的node封装
// hash.jsexports.additive = function (key, prime) { key = key instanceof Buffer ? key : new Buffer(key); prime = prime == undefined ? 0xffffffff : prime; for (var hash = key.length, i = 0; i转载 2016-12-07 10:19:47 · 1733 阅读 · 0 评论 -
动态规划-股票买卖总结
转载自:http://liangjiabin.com/blog/2015/04/leetcode-best-time-to-buy-and-sell-stock.htmlBest Time to Buy and Sell Stock IDescription: Say you have an array for which the ith element is the price转载 2016-12-07 17:45:00 · 4469 阅读 · 0 评论 -
N个元素的进出栈总数-方法转换-动态规划
其实此题还可以用动归方法解决,f[i,j],i表示入栈的个数,j表示出栈的个数,那f[i,j]就表示入栈i个数中出j个数的,但是此题要注意的是出栈数不能大于入栈数,那动归方程该如何推导,再次谢谢一位某位具有探索精神的大神为我们做了细致的研究现在我把它的论文粘贴如下:1 引 言在实际应用和数据结构课程的教学中,栈作为一种基本结构非常重要[1][3][4][6]。转载 2016-09-23 14:28:59 · 5222 阅读 · 1 评论 -
树、森林与二叉树的转换
1、树转换为二叉树由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号。将树转换成二叉树的步骤是:(1)加线。就是在所有兄弟结点之间加一条连线;(2)抹线。就是对树中的每个结点,只保留他与第一个孩子结点之间的连线,删除它与其它孩子结点之间的连线;(3)旋转。就是以树的根结点为轴心,将整棵树顺时针旋转一定角度,使之结构层次转载 2016-09-23 11:52:38 · 275 阅读 · 0 评论 -
排序总结
各种排序的总结#includeusing namespace std;//直接插入排序void insertSort(int arr[] ,int size){ for(int i=1;i<size;i++){ int temp = arr[i]; int j = i-1; while(j >= 0 && arr[j] > temp){ arr[j+1] = arr[原创 2017-03-17 21:05:10 · 274 阅读 · 0 评论