![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法数据结构编程
文章平均质量分 52
novas-meng
这个作者很懒,什么都没留下…
展开
-
微软面试2 堆栈
2.设计包含min函数的栈(栈)定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。这里我采用的是双向链表的方式实现堆栈,min函数设计的时候,一开始想到了设置一个指针指向最小的元素,但是发现当pop的时候,如果最小的元素被pop了,就不是o(1)了,所以最后采用了空间换取效率的方法,就是采用在每个节点上,增加原创 2015-03-27 14:37:02 · 382 阅读 · 0 评论 -
微软面试 第四题 路径和问题
在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22 和如下二元树10/ \5 12/ \4 7则打印出两条路径:10, 12 和10, 5, 7。很简单的一个问题,可以在后序遍历二叉树的时候,进行判断,这里借助了一个辅助的数原创 2015-03-29 14:50:48 · 297 阅读 · 0 评论 -
微软面试3 最大子数组问题
经典题,动态规划,详情可以看一下算法导论,里面有详细的介绍,大致的思想就是array[0]开始扫描,每次扫描都要进行判断,扫描到i时,最大的子数组可能有两种情况,一种是包括array[i],那么就是从array[i[以前向前寻找最大值的过程,另一种不包括array[i],那么最大值就是前i-1的最大值。代码如下#include int max(int a,int b){原创 2015-03-28 15:42:00 · 307 阅读 · 0 评论 -
微软面试题 组合排列算法
举个例子,比如1,2,3,4这4个数,从中选出任意不同的三个数有几种方案。一共有4种,123,124,134,234;这个就是排列组合算法,现在看看具体算法怎么实现;假设n个数,从中选择k个不同的数,首先我想到的就是可以充当4个链表,每个链表的数据都是n个数,依次进行访问,确保下一个链表的指针要比前一个链表的指针大,这样才能实现不同,后来发现这样效率很低,于是采用了数组去维护链表指针,可以看做原创 2015-04-02 23:25:43 · 417 阅读 · 0 评论 -
ACM hit 1010 The Angle
这道题算法简单,就是尼玛格式控制各种小心啊The interval angle between the hour hand and the minute hand is always among 0 degree and 180 degree(including 0 and 180 degree). For example, when it's 12 o'clock, the angl原创 2015-04-03 17:17:19 · 387 阅读 · 0 评论 -
微软面试题1 二元查找树转变为双向链表
二元查找树最大的特点就是左孩子节点小于父亲节点,右孩子节点大于父亲节点,所以在中序遍历的时候,进行一下指针的改变即可。具体的步骤就是先根据输入建立树,然后在中序遍历的时候,确定head和tail,head的确定可以是最左子树,也就是中序遍历第一个输出的元素。然后tail的确定可以采取迭代赋值的方式,最后一个输出的元素就是tail;原题如下 1.把二元查找树转变成排序的双向链表题目:原创 2015-03-25 16:38:51 · 355 阅读 · 0 评论 -
java 类型自动提升
java 自动类型提升原创 2015-08-20 08:41:23 · 539 阅读 · 1 评论 -
求n以内的素数个数问题
首先约定n的范围,1≤n≤10000000;如何判断一个数m是否是素数,可以有很多种方法,最常见的方法就是从1-根号m依次实验,然而这个方法的效率较慢,而且对于求n以内素数个数问题不适合。新思路:首先,如果2是素数的话,那么2的倍数一定不是素数。同理,如果3是素数的话,那么3的倍数一定不是素数。这样,我们就可以构建一个0-n的boolean数组,先初原创 2015-10-19 15:49:45 · 4685 阅读 · 0 评论