随笔分类 - 基础算法
摘要:数组中未出现的最小正整数http://www.nowcoder.com/discuss/1739https://leetcode.com/problems/contains-duplicate/http://www.nowcoder.com/practice/623a5ac0ea5b4e5f9555...
阅读全文
摘要:二叉树的重建几乎所有的人都知道二叉树可以根据前序遍历+中序遍历或者后序遍历+中序遍历的方式重新建立原来的二叉树,并且结果是唯一的。下面就来看一下相关的方法。前序+中序重建二叉树给定一棵二叉树的前序和中序遍历序列,重新建立这棵二叉树。注意:在前序中确定了根节点以后,要去中序里面查找这个根节点,这时的查...
阅读全文
摘要:前奏有这样一个问题:在一条左右水平放置的直线轨道上任选两个点,放置两个机器人,请用如下指令系统为机器人设计控制程序,使这两个机器人能够在直线轨道上相遇。(注意两个机器人用你写的同一个程序来控制)。 指令系统:只包含4条指令,向左、向右、条件判定、无条件跳转。其中向左(右)指令每次能控制机器人向左(右...
阅读全文
摘要:二叉查找树二叉查找树的性质:对于树中的每一个节点X,它的左子树中所有关键字值小于X的关键字值,它的右子树中的所有关键字值大于X的关键字值。二叉查找树的平均深度为O(logN),下面看一下它的相关的操作函数。删除一个二叉树(递归形式):void MakeEmpty(TreeNode *root){ i...
阅读全文
摘要:计算n的阶乘末尾0的个数首先,算出n的阶乘的结果再去计算末尾有多少个0这种方法是不可取的, 因为n的阶乘是一个非常大的数,分分种就会溢出。我们应当去分析, 是什么使n的阶乘结果末尾出现0。n阶乘末尾的0来自因子5和2相乘,5*2=10。因此,我们只需要计算n的阶乘里, 有多少对5和2。注意到2出现的...
阅读全文
摘要:问题:一个整数数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。分析:这是一个很新颖的关于位运算的题目。首先考虑这个问题的一个简单版本:一个整数数组里除了一个数字之外,其他的数字都出现两次,请写程序找出这个只出现一次的...
阅读全文
摘要:先来看斐波那契数列的公式:可以看出每一项等于前一项和前前一项的加和。看两种实现:这种递归的版本虽然很方便阅读,但是程序的执行的效率很低。因为在计算的时候,重复计算了太多的中间结点,重复计算了太多的子问题。并且随着n的增大,重复计算的问题更加的严重。int jumpFloor(int number){...
阅读全文
摘要:包含min函数的栈这个题目就是让实现一个新的栈,但是这个栈额外的增加一个函数,那就是min这个获得栈中元素最小值的函数。刚看到这个题目可能忽然想到用一个变量记录栈中元素的最小值,但是当栈中的这个最小元素被pop之后,谁又是最小值呢?于是想着用一个和栈一样大小的数组记录每个栈元素作为栈顶元素的时候,栈...
阅读全文
摘要:在进行位操作算法设计之前,先了解位操作的一些细节知识点:1. 位操作数据溢出的结果2. 数据位提升的隐式转换统计一个int类型整数对应的二进制数的1的个数:int NumberOf1Bits(int n){ int cnt = 0; while(n != 0) { cnt++; n = n ...
阅读全文
摘要:求最大公约数的最常用的算法是欧几里得算法,也称为辗转相除法。问题定义为求i和j的最大公约数gcd(i,j),其中i和j是整数,不妨设i>j。算法可以递归的表示:1.如果j能整除i,那么gcd(i,j)=j;2.j不能整除i,令r=i%j,那么gcd(i,j)=gcd(j,r). 上面的算法对于i=...
阅读全文
摘要:这是一道360的在线笔试题:赛马,有25匹马,每次只能5匹马进行比赛,比赛只能得到5匹马之间的快慢程度,而不是速度,请问,最少要比多少次,才能获得最快的前3匹马?解答:这道题乍一看,第一感觉就是肯定要分组,5个一组分成5组,然后比赛,得到每组的组冠军。然后让5个组冠军比赛得到前三名,似乎这样就可以了...
阅读全文
摘要:不管是字符串还是数组,在有序移动的时候都面临一个问题,那就是数组在有序插入的时候,总得移动后面的若干个元素,腾出一个空的位子然后才能把这个合适的值插入进去。也就是说一些元素的位置老随着新插入的元素变化,而不能一步到位的固定到他自己的位子上。这里提出的解决方法是一次性的申请足够大的空间,从后向前处理,...
阅读全文
摘要:对于二叉树的三种遍历方式,它们的难易程度是不一样的,最简单的是先序遍历,其次是中序遍历,最难的是后序遍历方式。但是最难的后序遍历方式,却可以通过最简单的先序遍历方式的变形实现,然后把遍历的结果逆序一下就搞定了。哈哈,物极必反啊!先看一个最简单的后序的遍历方法的实现,利用先序遍历方式的变形,然后逆序v...
阅读全文
摘要:对于二叉树的遍历,先序的方式是比较简单的,但是中序和后序的方式还是有点麻烦的,这里先给出一个用C++stack的遍历方式:1.如果当前结点不为空 把当前结点压入栈 p=p->left转向其左孩子2.如果当前结点为空(证明这半棵子树已经遍历完成,需要从栈顶找到树根) 取栈顶元素为当前结点,栈做一次弹栈...
阅读全文
摘要:循环遍历方法--先序遍历对于数据结构这方面来说,重点就是二叉树的遍历等操作,所有的问题基本都是集中在这里,先说一个二叉树的循环遍历的方法:vector preOrderTraversal(TreeNode *head){ vector result; const TreeNode *p; stack...
阅读全文
摘要:题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,举例,如果输入的矩阵是下面这个样子\[\left[ {\begin{array}{*{20}{c}}1&2&3&4\\5&6&7&8\\9&{10}&{11}&{12}\\{13}&{14}&{15}&{16}\end{array}}...
阅读全文
摘要:桶排序的基本思想现在有一个数组A,这个数组有size个元素,元素的范围为0~MAX。要求对这size个数据进行排序。建立一个大小为MAX+1的数组B,每一个元素都为0。从头开始遍历A,当遍历到A[i]的时候,令B[A[i]]的值加1;当把A整个扫面结束之后,输出B就得到了最后的排序结果。一个桶排序的...
阅读全文
摘要:题目:给定一个矩阵,从左上角开始每次只能向右或者向下移动,最后到达右下角的位置,路径上的所有的数字累加起来作为这条路径的路劲和。要求返回所有路径和中的最小路径和。举例:路径1,3,1,0,6,1,0是所有路径中路径和最小的,所以返回其和12。解析:这个题目很类似之前的那个动态规划的数字三角的问题。毫...
阅读全文
摘要:题目:给定一个无序整型数组arr,找到数组中未出现的最小正整数。要求时间复杂度为O(N)空间复杂度为O(1)。例如:arr=[-1,2,3,4]。返回1。arr=[1,2,3,4]。返回5。分析:这道题要理解最小正整数的意思,最小的正整数就是1,所以考察的方法就是在数组中找1,然后找2,依次找下去....
阅读全文
摘要:由于鲁棒性对于软件开发非常的重要,面试官在招聘的时候对应聘者写出的代码是否鲁棒也非常的关注。提高代码的鲁棒性的有效途径是进行防御性的编程。防御性编程的一个好的方法就是设计好的、全面的测试用例。如果我们能够把测试用例提前的写好,考虑到相应的问题,对鲁棒性做相应的处理,那么面试官会觉得我们的防御性编程的...
阅读全文

浙公网安备 33010602011771号