算法
Marvin_Huoshan
N
展开
-
Lintcode 197 排列序号
为了更加直观的看清楚我们选择一个大点的数组[6,8,4,7,5,3,2]这个数组,他的第一排序是[2,3,4,5,6,7,8]对吧,然后首先拿到待计算排序的第一个元素6,那么在6之前比他小的元素有几个呢? 是不是有2,3,4,5这4个,确定了第一个元素后,其他剩下的7-1=6个元素进行全排列,共有6!=720种,所以一共有4*(7-1)!种。但是计算第二个元素的时候要小心了。现在第2个元素是8,比...原创 2018-06-01 17:37:21 · 281 阅读 · 0 评论 -
逆波兰表达式
flag用于防止重复入栈,将运算符设置优先级,并且区别右括号匹配做括号这一特殊情况。#include <vector>#include <stack>class Solution {public: /** * @param expression: A string array * @return: The Reverse Polish notation...原创 2018-04-12 21:56:26 · 210 阅读 · 1 评论 -
LintCode 362.滑动窗口的最大值 (C++)
滑动窗口的最大值,采用双队列方法。队列存储元素下标队列最左端永远是最大值的下标,并且保持队列的严格递减。原创 2018-04-22 16:07:10 · 397 阅读 · 1 评论 -
lintcode 436.最大正方形 C++vector实现
思路:找最大正方形的边长,动态规划,每个点能否构成正方形,考虑matrix[i-1][j-1],matrix[i][j-1],matrix[i-1][j],如果三者均大于0,则可以构成正方形,构成正方形的变长是三者中最小值加1,遍历的同时统计最大值。注意返回平方才是面积。class Solution {public: int maxSquare(vector<vector<int...原创 2018-04-17 23:14:09 · 372 阅读 · 1 评论 -
判断一个数是否为素数---高效判断法
(质数筛选定理)n不能够被不大于根号n的任何质数整除,则n是一个质数。所以循环只需要遍历到sqrt(n)即可。bool isPrime_2( int num ) { int tmp =sqrt( num); for(int i= 2;i <=tmp; i++) if(num %i== 0) return 0 ; r...转载 2018-03-27 16:35:05 · 885 阅读 · 1 评论 -
计算数字k在0到n中的出现的次数,k可能是0~9的一个值
先晒代码当计算第k位包含x的个数时一,取高位数字,成以10^(i-1),得到基础值;二,对于第k位大于x,结果为a+10^(i-1);小于x,结果为a;等于x,结果为a+低1位+1;同时注意x=0的情况。分析帮助:以下分析文字转载于作者:CYJB 出处:http://www.cnblogs.com/cyjb/ GitHub:https://github.com/CYJB/ 从 1 至 10,在它...原创 2018-03-25 23:27:57 · 1200 阅读 · 2 评论 -
KMP算法详解
一:背景 给定一个主字符串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,即串的模式匹配问题。今天来介绍解决这一问题的常用算法之一,Knuth-Morris-Pratt 算法(简称 KMP),这个算法是由高德纳(Donald Ervin Knuth)和沃恩·普拉特在1974年构思,同年詹姆斯·H·莫里斯也独立地设计出该算法,最终由三人于1977年联合发表。 在继续...转载 2018-03-30 13:31:20 · 974 阅读 · 1 评论 -
Lintcode 651 二叉树垂直遍历
我们可以把根节点给个序号0,然后开始层序遍历,凡是左子节点则序号减1,右子节点序号加1,这样我们可以通过序号来把相同列的节点值放到一起,我们用一个TreeMap来建立序号和其对应的节点值的映射,用TreeMap的另一个好处是其自动排序功能可以让我们的列从左到右,由于层序遍历需要用到queue,我们此时queue里不能只存节点,而是要存序号和节点组成的pair,这样我们每次取出就可以操作序号,而且排...原创 2018-06-02 00:52:53 · 582 阅读 · 0 评论