
算法
Before1993
这个作者很懒,什么都没留下…
展开
-
硬币表示
题目描述有数量不限的硬币,币值为25分、10分、5分和1分,请编写代码计算n分有几种表示法。给定一个int n,请返回n分有几种表示法。保证n小于等于100000,为了防止溢出,请将答案Mod 1000000007。测试样例:6返回:2代码:class Coins {public: int countWays(int n)原创 2016-04-26 21:55:44 · 629 阅读 · 0 评论 -
满足条件的整数对个数
题目描述请设计一个高效算法,找出数组中两数之和为指定值的所有整数对。给定一个int数组A和数组大小n以及需查找的和sum,请返回和为sum的整数对的个数。保证数组大小小于等于3000。测试样例:[1,2,3,4,5],5,6返回:2方法一:双指针法:class FindPair {public: int countPairs(vecto原创 2016-06-16 08:55:04 · 1530 阅读 · 0 评论 -
最小调整有序
题目描述有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6转载 2016-06-15 10:19:14 · 701 阅读 · 0 评论 -
阶乘末尾零的个数
题目描述请设计一个算法,计算n的阶乘有多少个尾随零。给定一个int n,请返回n的阶乘的尾零个数。保证n为正整数。测试样例:5返回:1思路:对N!进行质因数分解,N!=2的X次方*3的Y次方*5的Z次方*.....因为10=2*5,所以末尾零的个数只与X和Z相关,每一对2和5相乘可以得到一个10,因为X大于等于Z,所以只要求出Z的值即可。代码:原创 2016-06-13 21:33:38 · 649 阅读 · 0 评论 -
位运算总结
原文转自http://blog.youkuaiyun.com/morewindows/article/details/7354571在计算机中所有数据都是以二进制的形式储存的。位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。在实际编程中,如果能巧妙运用位操作,完全可以达到四两拨千斤的效果,正因为位操作的这些优点,所以位操作在各大IT公司的笔试面试中一直是个热转载 2016-05-08 15:23:16 · 395 阅读 · 0 评论 -
无缓存交换
题目描述请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值。给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回交换后的数组。测试样例:[1,2] 返回:[2,1]代码:class Exchang原创 2016-05-08 15:16:55 · 757 阅读 · 0 评论 -
数组中的逆序对
题目描述有一组数,对于其中任意两个数组,若前面一个大于后面一个数字,则这两个数字组成一个逆序对。请设计一个高效的算法,计算给定数组中的逆序对个数。给定一个int数组A和它的大小n,请返回A中的逆序对个数。保证n小于等于5000。测试样例:[1,2,3,4,5,6,7,0],8返回:7思路:冒泡排序,交换了多少次,就有有多少逆序对。代码cl原创 2016-05-08 15:00:17 · 360 阅读 · 0 评论 -
洪水
题目描述:在一个nxm矩阵形状的城市里爆发了洪水,洪水从(0,0)的格子流到这个城市,在这个矩阵中有的格子有一些建筑,洪水只能在没有建筑的格子流动。请返回洪水流到(n - 1,m - 1)的最早时间(洪水只能从一个格子流到其相邻的格子且洪水单位时间能从一个格子流到相邻格子)。给定一个矩阵map表示城市,其中map[i][j]表示坐标为(i,j)的格子,值为1代表该格子有建筑,0原创 2016-04-23 15:42:57 · 1467 阅读 · 0 评论 -
双栈排序
题目描述请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。测试样例:[1,2,3,4,5]返回:[5,4,原创 2016-04-21 16:03:41 · 634 阅读 · 0 评论 -
叠罗汉II
题目描述叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。为了使叠成的罗汉更稳固,我们应该让上面的人比下面的人更轻一点。现在一个马戏团要表演这个节目,为了视觉效果,我们还要求下面的人的身高比上面的人高。请编写一个算法,计算最多能叠多少人,注意这里所有演员都同时出现。给定一个二维int的数组actors,每个元素有两个值,分别代表一个演员的身高和体重。同时给定演员总数n原创 2016-05-05 21:51:53 · 851 阅读 · 0 评论 -
叠罗汉
题目描述叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上。同时我们应该让上面的人比下面的人更高一点。已知参加游戏的每个人的身高,请编写代码计算通过选择参与游戏的人,我们多能叠多少个人。注意这里的人都是先后到的,意味着参加游戏的人的先后顺序与原序列中的顺序应该一致。给定一个int数组men,代表依次来的每个人的身高。同时给定总人数n,请返回做多能叠的人数。保证n小于等于原创 2016-05-05 21:02:12 · 1194 阅读 · 0 评论 -
二维数组的查找
题目描述有一个NxM的整数矩阵,矩阵的行和列都是从小到大有序的。请设计一个高效的查找算法,查找矩阵中元素x的位置。给定一个int有序矩阵mat,同时给定矩阵的大小n和m以及需要查找的元素x,请返回一个二元数组,代表该元素的行号和列号(均从零开始)。保证元素互异。测试样例:[[1,2,3],[4,5,6]],2,3,6返回:[1,2]代码:原创 2016-05-05 20:34:11 · 398 阅读 · 0 评论 -
旋转数组中元素的查找
题目描述有一个排过序的数组,包含n个整数,但是这个数组向左进行了一定长度的移位,例如,原数组为[1,2,3,4,5,6],向左移位5个位置即变成了[6,1,2,3,4,5],现在对于移位后的数组,需要查找某个元素的位置。请设计一个复杂度为log级别的算法完成这个任务。给定一个int数组A,为移位后的数组,同时给定数组大小n和需要查找的元素的值x,请返回x的位置(位置从零开始)。原创 2016-05-04 15:11:45 · 1029 阅读 · 0 评论 -
第k个数
题目描述有一些数的素因子只有3、5、7,请设计一个算法,找出其中的第k个数。给定一个数int k,请返回第k个数。保证k小于等于100。测试样例:3返回:7解题思路: 代码:class KthNumber {public: int findKth(int k) { // write code here原创 2016-05-03 09:09:28 · 495 阅读 · 0 评论 -
约瑟夫环
题目描述约瑟夫问题是一个非常著名的趣题,即由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。给定两个int n和m,代表游戏的人数。请返回最后一个出局的人的编号。保证n和m小于等于1000。测试样例:5 3返回:4思路:把n个人的编号改为0~n-1,然后对删除的过程进行分析原创 2016-04-29 21:22:20 · 527 阅读 · 0 评论 -
最大连续数列和
题目描述对于一个有正有负的整数数组,请找出总和最大的连续数列。给定一个int数组A和数组大小n,请返回最大的连续数列的和。保证n的大小小于等于3000。测试样例:[1,2,3,-6,1]返回:6思路:动态规划法。设record[j]为以A[i]为结尾的最大连续数列和,然后求最大值。class MaxSum {public: int ge原创 2016-05-11 21:09:14 · 1774 阅读 · 0 评论 -
堆箱子
题目描述:有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须大于下面的箱子。请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起来的所有箱子的高度之和。给定三个int数组w,l,h,分别表示每个箱子宽、长和高,同时给定箱子的数目n。请返回能堆成的最高的高度。保证n小于等于500。测试样例:原创 2016-04-29 15:13:46 · 1443 阅读 · 0 评论 -
下一个较大元素
题目描述现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。测试样例:[11,13,10,5,12,21,3],7返回:[13,21,12,12,21,-1,-1]思路:使用栈,看代码比较好明白。原创 2016-07-07 16:08:54 · 560 阅读 · 0 评论