随笔分类 - Microsoft100
微软面试100道
摘要:问题描述Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.For example:Given n = 13,Retu...
阅读全文
摘要:问题描述输入两个整数序列,其中一个为入栈序列,另一个为出栈序列。判断出栈序列是否是合法的。解决思路使用一个辅助栈,用最直观的方式。程序public class ValidPopSequence { public boolean isValidPopSeq(int[] push, int[] pop)...
阅读全文
摘要:问题描述输入1个整数,求其二进制表示中有多少个“1”。解决思路1. 不断右移,碰到1与0与,计数;(对于负数不可,会死循环);2. 与(n-1)与,相当于清除最右端的“1”,计数。程序思路2:public class NumOfOne { public int getNumOfOne(int num...
阅读全文
摘要:问题描述一个台阶有n级,一次可以跳1级或者2级。问共有多少种跳法?分析算法的时间复杂度。解决思路假设f(n)代表n级台阶的跳法数目,其递推式如下:当n=1时,f(n)=1;当n=2时,f(n)=2;其他,f(n)=f(n-1)+f(n-2)那么有如下几种解决方法:1. 递归,指数级时间复杂度;2. ...
阅读全文
摘要:问题描述定义字符串的左旋转操作:将字符串前面的若干个字符移动到字符串的尾部。例如,字符串“abcdef”左旋转2位得到“cdefab”。要求实现的算法时间复杂度为O(n),常数级空间复杂度。解决思路整体翻转+部分翻转程序public class LeftRotateString { public v...
阅读全文
摘要:问题描述在字符串中找出连续最长的数字串,并将该串返回。(略有修改)解决思路双指针法。一前一后,注意保存最长连续数字串的开始或者结束位置和最长串的长度,最后返回该子串即可。程序public class LongestContinuousDigits { public String getLCD(Str...
阅读全文
摘要:问题描述将原题简单化,在二维平面上怎么判断一个矩形(已知四个矩形的角的坐标)和一个圆(已知圆心坐标和半径)是否相交?解决思路枚举各种情况。但是有简单的处理方式。如下图(字丑勿怪= =)程序比较简单,就忽略了><
阅读全文
摘要:程序 public class ListReverse { public ListNode reverseList(ListNode head) { if (head == null) { return head; } ListNode pre = head; ListNode cur ...
阅读全文
摘要:问题描述输入两个整数n和m,从数列1,2,3,...,n中随意取出几个数。使其和等于m,把所有符合的组合列出来。解决思路dfs,注意:1. 一个元素只能使用一次;2. 保证输出的集合不重复。程序public class SubsetSum { public List> getSubset(int n...
阅读全文
摘要:问题描述求Fibonacci数列的第n项。Fibonacci数列为1,1,2,3,5,...解决思路(1) 递归,指数级时间复杂度;(2) 循环,O(n)时间复杂度;(3) 矩阵乘法,O(logn)时间复杂度;(4) 公式法,O(1)时间复杂度。程序public class Fibonacci { ...
阅读全文
摘要:问题描述n个数字(0,1,...,n-1)形成一个圆圈,从数字0开始。每次从这个圆圈中删除第m个数字,然后从被删除的下一个继续删除第m个元素,以此类推。直到最后剩下一个数字,求出该数字。解决思路1. 使用循环链表模拟这一过程,计数器计数;2. 递归思路(图片来源:http://www.cnblogs...
阅读全文
摘要:问题描述在一个字符串中找到第一个只出现一次的字符。如输入字符串"abbc",应该输出字符'a'。程序public class FirstCharacter { // Time/Space: O(n) public char findFirstAppearChar(String s) { if (s...
阅读全文
摘要:http://www.cnblogs.com/harrygogo/p/4599097.html中的层次遍历。
阅读全文
摘要:问题描述输入一颗BST,将该树转换为它的镜像。要求使用递归和非递归两种思路解决。解决思路非递归基于BST。程序public class MirrorOfBST {public void toMirrorRec(TreeNode root) { if (root == null) { return ...
阅读全文
摘要:问题描述输入一个单向链表,输出该链表中倒数第K个节点,定义倒数第1个节点为链表的尾节点。如果K值超过链表长度,那么抛出异常。解决思路双指针法。程序public class LastKthNodeOfList { public ListNode getLastKthNodeOfList(ListNod...
阅读全文
摘要:问题描述输入一个句子,翻转句子中单词的顺序,但是单词内字符的顺序不变。解决思路(1)整体翻转;(2)单词翻转。程序public class ReverseWords { public String reverseWords(String s) { if (s == null || s.length...
阅读全文
摘要:问题描述RT.如果把二叉树看做是一张图,父子节点的连线看成是双向的,距离的定义为两个节点之间变得数目。解决思路求根节点的左子树的高度和右子树的高度,相加。程序public class MaxDistanceInTree { public int getMaxDistanceInTree(TreeNo...
阅读全文
摘要:问题描述输入一个整数序列,判断该序列是否为一颗BST的后序遍历序列。解决思路递归:(1)序列的最后一个元素为根节点元素;(2)在序列中找出前一段代表根节点的左子树孩子们,而剩下的一段为右子树孩子们,检查这些节点的值是否都是大于(等于根节点元素)。(3)然后递归的对两部分进行判断。程序public c...
阅读全文
摘要:问题描述RT.解决思路(1)两链表都是单向链表:判断两链表的末尾节点是否相同;(2)两链表中一个有环,一个没环:不可能相交;(3)两链表都有环:slow-fast双指针方法。程序public class ListIntersection { // two single list public boo...
阅读全文
摘要:问题描述输入一个整形数组和K,输出数组中前K大的元素们。解决思路思路1:排序如果用快排,平均时间复杂度为O(nlogn),最坏时间复杂度为O(n^2);空间复杂度为O(logn)~O(n);如果用堆排,时间复杂度为O(nlogn),空间复杂度为O(1).注意:Java中Arrays.sort()方法...
阅读全文

浙公网安备 33010602011771号