Algorithm
文章平均质量分 65
蓝旭晨枫
无论这个世界对你怎样,都请你一如既往的努力、勇敢、充满希望
展开
-
微软2016年实习生在线笔试第二题(403 Forbidden)
题目2 : 403 Forbidden时间限制:10000ms单点时限:1000ms内存限制:256MB描述Little Hi runs a web server. Sometimes he has to deny access from a certain set of malicious IP addresses while his原创 2016-04-19 23:32:07 · 939 阅读 · 5 评论 -
京东2016实习生招聘 C++开发工程师 在线考试(编程题第二题:选举游戏)
京东2016实习生招聘 C++开发工程师在线考试编程题30分2/2选举游戏Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Problem Description:小东和其他小朋友正在玩一个关于选举的游戏。选举是通过投票的方式进行的,原创 2016-04-08 20:27:51 · 1181 阅读 · 0 评论 -
将二叉树拆成链表
将二叉树拆成链表 描述 笔记 数据 评测将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。您在真实的面试中是否遇到过这个题? Yes 注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。样例原创 2016-04-25 12:35:04 · 1673 阅读 · 0 评论 -
STL sort函数的内部实现
(1)在STL提供的各式各样的算法中,sort()是最复杂最庞大的一个。这个算法只接受RandomAccessIterators(随机存取迭代器),然后将区间内所有元素由小到大重新排列。第二个版本允许用户自己指定一个仿函数作为排序标准。(2)对于关系型容器,底层自己采用有自动排序功能的RB-Tree,不需要用到sort算法,序列式容器中stack、queue和priorit原创 2016-04-08 10:35:10 · 3863 阅读 · 1 评论 -
最少跳数到达末尾(Jump Game)
第一题:判断是否能跳到最后55. Jump GameMy SubmissionsQuestionEditorial SolutionTotal Accepted: 74643 Total Submissions: 265245 Difficulty: MediumGiven an array of non-negative int原创 2016-04-07 12:24:01 · 808 阅读 · 0 评论 -
网易游戏在线笔试(电子数字+画线)
题目1 : 电子数字时间限制:10000ms单点时限:1000ms内存限制:256MB描述电子数字在生活中很常见,而许多的电子数字是由LED数码管制作而成。数字LED数码管一般由7个发光二极管封装在一起,组成'8'字型,引线在内部连接完成。如下图所示,我们可以对每个发光管进行编码从1到7。而数字0到数字9可以由这七根发光管的亮暗来表示。对原创 2016-04-05 20:46:43 · 1300 阅读 · 6 评论 -
Remove Duplicates from Table
Remove Duplicates from Table[Description]You are give a table named PersonCode: Select all[Description]You are give a table named PersonCode: Select all+-------------+--原创 2016-04-07 19:29:28 · 242 阅读 · 0 评论 -
两个序列组合成最大的数Create Maximum Number
321. Create Maximum NumberMy SubmissionsQuestionEditorial SolutionTotal Accepted: 4905 Total Submissions: 24041 Difficulty: HardGiven two arrays of length m and n with digi原创 2016-04-05 20:36:16 · 864 阅读 · 0 评论 -
求n的阶层二进制最低位1的位置
求 N!二进制最低位 1 的位置此问题等同于统计n的阶层末尾 0 的个数这实际上是求 N!含有质因数 2 的个数。因此答案为含有质因数 2 的个数加 1分析原因:(1)因为如果全是奇数,那么其二进制表示最低位肯定是1(2)每乘以一个2,最低位多一个0由于 N!中含有质因数 2 的个数 = [N/2] + [N/4] + [N/8] + [原创 2016-04-07 18:26:32 · 542 阅读 · 0 评论 -
冒泡排序改进
改进的冒泡排序算法冒泡排序算法,是最基本的排序算法, 它属于交换排序。冒泡排序过程设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮"(交换位置),如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。性能分转载 2016-04-06 22:22:59 · 408 阅读 · 0 评论 -
Sort Colors(荷兰旗问题)
75. Sort ColorsMy SubmissionsQuestionEditorial SolutionTotal Accepted: 94286 Total Submissions: 272931 Difficulty: MediumGiven an array with n objects colored red, white or b原创 2016-04-07 09:19:13 · 420 阅读 · 0 评论 -
动态规划之0-1背包问题
问题描述: 现有n件物品和一个容量为c的背包。第i件物品的重量是重量为w[i],价值是v[i]。已知对于一件物品必须选择取(用1表示)或者不取(用0表示),且每件物品只能被取一次(这就是“0-1”的含义)。求放置哪些物品进背包,可使这些物品的重量总和不超过背包容量,且价值总和最大。求解思路: 假设有5件物品,其重量分别是w={2,2,6,5,4},价值分别是v=转载 2016-04-11 10:32:54 · 374 阅读 · 0 评论 -
最多有多少个点在一条直线上
最多有多少个点在一条直线上 描述 笔记 数据 评测给出二维平面上的n个点,求最多有多少点在同一条直线上。您在真实的面试中是否遇到过这个题? Yes样例给出4个点:(1, 2), (3, 6), (0, 0), (1, 3)。一条直线上的点最多有3个。标签 /** * D原创 2016-04-16 18:45:57 · 840 阅读 · 0 评论 -
【线段树】线段树入门之入门
线段树的入门级 总结 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。 使用线转载 2016-05-08 12:54:49 · 342 阅读 · 0 评论 -
线段树之应用 ---- #1299 : 打折机票
#1299 : 打折机票时间限制:10000ms单点时限:1000ms内存限制:256MB描述 因为思念新宿的"小姐姐"们,岛娘计划6月份再去一趟东京,不过这次看来她需要自掏腰包。经过了几天的夜战,岛娘终于在体力耗尽之前,用Python抓下了所有6月份,上海至东京的全部共 n 张机票。现在请你帮助债台高筑的岛娘筛选出符合时间区间要求的原创 2016-05-08 16:59:31 · 618 阅读 · 0 评论 -
用Trie树统计以给定字符串为前缀的单词个数
#1014 : Trie树时间限制:10000ms单点时限:1000ms内存限制:256MB描述小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在原创 2016-04-21 17:16:06 · 1927 阅读 · 0 评论 -
Lintcode 单词的添加与查找
单词的添加与查找 描述 笔记 数据 评测设计一个包含下面两个操作的数据结构:addWord(word), search(word)addWord(word)会在数据结构中添加一个单词。而search(word)则支持普通的单词查询或是只包含.和a-z的简易正则表达式的查询。一个 . 可以代表一个任何的字母。您在真实的面试中原创 2016-04-20 18:07:59 · 1016 阅读 · 0 评论 -
网易游戏第二场 - 题目3 : 神奇的数
题目3 : 神奇的数时间限制:10000ms单点时限:1000ms内存限制:256MB描述Celin一直认为万物皆数,他总会花上很多的时间去研究和数相关的一些问题。最近他在研究一种神奇的数,这种数包含以下3个特征:(1) 这个数至少包含('2', '3', '5')中的任意一个数字;(2) 这个数不能出现'18';(3) 这个原创 2016-04-22 15:00:03 · 974 阅读 · 0 评论 -
#1040 : 矩形判断
#1040 : 矩形判断时间限制:1000ms单点时限:1000ms内存限制:256MB描述给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形。输入输入第一行是一个整数T(1每组数据包含4行,每行包含4个整数x1, y1, x2, y2 (0 输出每组数据输出一行YES或者NO,表示输入的4条线原创 2016-05-06 21:12:49 · 433 阅读 · 0 评论 -
#1050 : 树中的最长路
#1050 : 树中的最长路时间限制:10000ms单点时限:1000ms内存限制:256MB描述上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树——好吧,其实就是更为平常的树而已。但是不管怎么说,小Ho喜爱的玩具又升级换代了,于原创 2016-05-16 21:53:28 · 424 阅读 · 0 评论 -
Edit Distance(两字符串经过最少操作匹配)
72. Edit DistanceMy SubmissionsQuestionEditorial SolutionTotal Accepted: 55602 Total Submissions: 195784 Difficulty: HardGiven two words word1 and word2, find the minimum num原创 2016-04-07 09:28:06 · 545 阅读 · 0 评论 -
生成螺旋矩阵(方阵、矩阵)
54. Spiral MatrixMy SubmissionsQuestionEditorial SolutionTotal Accepted: 56094 Total Submissions: 250811 Difficulty: MediumGiven a matrix of m x n elements (m rows, n columns原创 2016-04-07 10:11:21 · 904 阅读 · 0 评论 -
爬楼梯(LintCode Climbing Stairs)
迭代(非递归):递归:原创 2016-04-07 10:46:41 · 1414 阅读 · 0 评论 -
统计论坛在线人数分布
统计论坛在线人数分布发表于 2015 年 4 月 27 日//每个ID从登陆到退出会向一个日志文件记下登录时间和退出时间//要求设计算法统计一天中论坛在线人数分布,取样粒度为秒3600 * 24 = 86400s //一天总共86400sint delta[86400] //每个整数对应这一秒论坛在线人数变化值//初始化为转载 2016-04-06 16:08:22 · 895 阅读 · 0 评论 -
判断回文链表
Palindrome Linked List Total Accepted: 5991 Total Submissions: 25994My SubmissionsGiven a singly linked list, determine if it is a palindrome.Follow up:Could you do it in O(n) time and原创 2016-04-06 15:34:16 · 274 阅读 · 0 评论 -
求Maximim Gap 排序后的两个相邻元素之间的最大差值
方法、桶排序为了满足O(n)复杂度,尝试计数排序,但是会TLE。因此使用桶排序来做计数排序可以看做是桶大小为1的桶排序,但由于桶数目太多导致遍历时间过长最大gap肯定是出现在后一个有效桶的min与前一个有效桶的max之间(“有效”指的是忽略空桶)步骤思路:1、数组中有N个元素,最小元素为min、最大元素为max2、平均间隔为gap = c原创 2016-04-06 15:28:29 · 900 阅读 · 0 评论 -
最长递增子序列
(1)动态规划O(N^2)复杂度(2)O(N Log N)优化算法http://www.geeksforgeeks.org/longest-monotonically-increasing-subsequence-size-n-log-n/From the observations, we need to maintain lists of incr原创 2016-04-06 15:23:20 · 307 阅读 · 0 评论 -
判断无向图是否是树
图是否是树给出 n 个节点,标号分别从 0 到 n - 1 并且给出一个 无向 边的列表 (给出每条边的两个顶点), 写一个函数去判断这张`无向`图是否是一棵树您在真实的面试中是否遇到过这个题? Yes 注意事项你可以假设我们不会给出重复的边在边的列表当中. 无向边 [0, 1] 和 [1, 0] 是同一条边, 因此他们不会同时出现在原创 2016-04-06 15:20:25 · 5094 阅读 · 0 评论 -
求下一个排列组合和前一个排列组合(next_permutation和pre_permutation)
分析原理:注解:(1)上面的 { 6 3 5 4 2 1 }这个序列(2)如果比较一个序列的大小,肯定是按从前往后第一个大的序列为较大者(3)这个序列中5 4 2 1这个部分的序列已经达到了最大了,因为已经逆序了(4)因此需要将前面这个3变大一点,于是就是在后面的数中找一个最小的大于3 的数与3交换(5)交换后后面的序列仍然原创 2016-04-06 15:11:07 · 1164 阅读 · 0 评论 -
爱情数字(蘑菇街在线笔试)
题目:方法一、递归方法二、先确定位数,若剩余油漆足够替换高位,则替换,替换完若还有油漆,继续替换,直到油漆没了。原创 2016-04-05 20:27:13 · 1316 阅读 · 0 评论 -
模拟大整数加、减、乘、除法
0、这个是比较函数1、模拟乘法2、模拟除法3、模拟加法4、模拟减法原创 2016-04-05 15:33:54 · 684 阅读 · 0 评论 -
最少交换次数
第一个问题:现在想通过交换相邻元素的操作把一个给定序列交换成有序,最少需要交换的次数是多少?比如3 1 2 4 5需要最少交换2次。答案:需要交换的最少次数为该序列的逆序数。证明:可以先将最大数交换到最后,由于是相邻两个数交换,需要交换的次数为最大数后面的数的个数(可以看做是最大数的逆序数),然后,交换过后,去除最大数,再考虑当前最大数也需要其逆序数次交换。则每个数都需要交换其逆序原创 2016-04-05 14:11:32 · 1615 阅读 · 1 评论 -
链表逆转(递归+非递归)
将链表逆转。非递归:1234567891011121314151617181920212223242526/** * Definition for原创 2016-04-06 16:09:27 · 424 阅读 · 0 评论 -
链表归并排序
对一个链表进行排序,且时间复杂度为O(nlongn),空间复杂度为常量。首先一看到O(nlongn)的排序就应该想到归并排序和快速排序。归并排序:在一般情况下,归并排序的空间复杂度为O(n)的,需要复制出相等空间来进行赋值排序。但实际上,对于链表是可以实现常数空间的。利用归并排序的思想递归的将当前链表分为两段,然后merge,分两段的方法:使用fast-原创 2016-04-06 16:12:22 · 618 阅读 · 0 评论 -
有关图的几个经典问题
1、判断一个有向图是否有环 1、深度优先 2、拓扑排序拓扑排序过程如下图2、4个顶点的无向完全图,一共有多少棵生成树? 4个顶点无向完全图共有C(2,4) = 6 条边,生成树有 4 - 1 = 3 条边,因此共有 C(3,6)棵生成树3、n个节点的二叉树数目4、无向图G = (V,E)含有7个顶点原创 2016-04-06 16:14:09 · 7214 阅读 · 1 评论 -
矩阵旋转
原创 2016-04-07 10:34:05 · 268 阅读 · 0 评论 -
求第k个排列组合(Permutation Sequence)
60. Permutation SequenceMy SubmissionsQuestionEditorial SolutionTotal Accepted: 52210 Total Submissions: 208943 Difficulty: MediumThe set [1,2,3,…,n] contains a total of n!原创 2016-04-07 09:40:03 · 659 阅读 · 0 评论 -
求n的阶层末尾0的个数
统计n的阶层的末尾0的个数思路:(1)设 N! = K × 10^M,且K不能被10整除,那么N!末尾有M个0(2)再考虑对N!进行质因数分解,N! = (2^X)*(3^Y)*(5^z).........因为 10 = 2 × 5,所以 M 只跟 X 和 Z 有关,每一对2和5得到一个10于是M = min(X,Z),不难看出X显然大于Z,因为能被2整原创 2016-04-06 23:12:06 · 1225 阅读 · 0 评论 -
子数组和最大值
/*求子数组的最大和*/int maxSum(int *arr, int len){ int sum, max; sum = max = arr[0]; for (int i = 1; i < len; ++i) { if (sum <= 0) sum = arr[i]; else sum += arr[i]; if (sum > max) max = s原创 2016-04-06 23:10:55 · 254 阅读 · 0 评论 -
找出数组中出现次数超过一半或者超过1/3的元素
1、找出数组中出现次数超过一半的元素int majorityElement(const vector& nums) { int m; int count = 0; for (auto num : nums) { if (0 == count) { m = num; ++count; } else { if (m == num) ++count;原创 2016-04-06 23:02:39 · 5964 阅读 · 3 评论