10 2015 档案
摘要:30.在从1到n的整数中1出现的次数题目:输入一个整数n,求从1到n 这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11 和12,1 一共出现了5 次。分析:这是一道广为流传的google 面试题思路:第一反应是遍历这N个数,然后对每个正数n不断用1...
阅读全文
摘要:任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4思路:最直观的方法是对n和0001做&运算,如果结果为1,则counter加一,否则不变,然后将n右移一位,直到n=0为止. 方法count1和count2都是这种思路...
阅读全文
摘要:27.跳台阶问题题目:一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级。求总共有多少总跳法,并分析算法的时间复杂度思路:通过数学归纳法n=1 1n=2 2n=3 3n=4 5n=5 8可知n>=3时 f(n)=f(n-1)+f(n-2) 是一个斐波那契数列, 该问题的时间复杂度也就是求斐波...
阅读全文
摘要:26.左旋转字符串题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n 的字符串操作的复杂度为O(n),辅助内存为O(1)思路:先反转整个字符串 -> fedcba 在分别反...
阅读全文
摘要:第25 题:写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr 所指内存。例如:"abcd12345ed125ss12...
阅读全文
摘要:第24 题:链表操作,单链表就地逆置思路: 本来想拿两个指针分别指向当前节点和上一节点,在向后移动指针的过程中将当前节点的next指针逆向为上一节点,但这样就无法继续向后移动当前节点了。。。。转换一下思路,对于n各节点,逆序的操作可以分解为把后面n-1个节点逆序,然后再把第一个节点放在已经逆序好的n...
阅读全文
摘要:第21 题编程求解:输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来思路:典型的01背包问题,按照背包问题的思路,可以将问题:f(n,m),分解为f(n-1,m)和[f(n-1,m-n),n]两个子问题就是N个数里面和等于M的元素...
阅读全文
摘要:第20 题:题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345思路:atoi 主要考虑的是对输入的校验和边界处理,以及处理正负符号等 1 package com.rui.microsoft; 2 3 public class Test20_Str...
阅读全文
摘要:第18 题:题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。求出在这个圆圈中剩下的最后一个数字约瑟夫环问题,第一思路是拿双向链表解决...
阅读全文
摘要:第17 题:题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b思路:要找出只出现一次的字符,很明显需要统计所有字符出现的次数,然后找出次数为一的那一个,统计次数最先想到的是hashTable,但此题有更好的办法,因为每个char其实对应一个唯一的ASCII值,所以可以...
阅读全文
摘要:第16 题:题目(微软):输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。例如输入8/ \6 10/ \ / \5 7 9 11输出8 6 10 5 7 9 11思路:遇到这种按层执行或者按次序执行的动作,一般会联想到队列 1 package com.rui.micro...
阅读全文
摘要:第15 题:题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入:8/ \6 10/\ /\5 7 9 11输出:8/ \10 6/\ /\11 9 7 5思路:1.递归: 根节点的镜像必然由其左子树...
阅读全文
摘要:第14 题:题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11思路:因为是已排好...
阅读全文
摘要:第13 题:题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0 个结点为链表的尾指针思路:先遍历链表,求得总节点数N,则倒数第K个节点是正数N-K,时间复杂度为o(N+N-K) 1 package com.rui.microsoft; 2 3 public class Test13...
阅读全文
摘要:题目:已知二叉树的前序序列和中序序列求解树比如 6 4 83 5 7前序序列为6,4,3,5,8,7中序序列为3,4,5,6,7,8思路: 前序遍历序列的第一个元素必为根节点 则中序遍历序列中,该节点之前的为左子树,该节点之后的为右子树,若该节点之前没有节点,则左子树为空,反之右子...
阅读全文
摘要:第11 题求二叉树中节点的最大距离...如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离思路: 一棵树中节点的最大距离,对于根节点来说,可以看做是左子树的最大深度加右子树的最大深度在加上左右各...
阅读全文
摘要:第10 题翻转句子中单词的顺序。题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”思路:可以先翻转整个字符串,然后依次截取各个单词,...
阅读全文
摘要:9.判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:8/ \6 10/ \ / \5 7 9 11因此返回true。...
阅读全文
摘要:5.查找最小的k 个元素题目:输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。思路: 对于元素集合非常大的情况,比如上亿条数据,可以通过在内存中构造一个有限大小的大堆(heap)来处理大堆的特性是根节点总是为堆内元素...
阅读全文
摘要:4.在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22 和如下二元树10/ \5 12/ \4 7则打印出两条路径:10, 12 和10, 5, 7思路: 递归 为了...
阅读全文
摘要:3.求子数组的最大和题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,...
阅读全文
摘要:要求:1. 定义栈的数据结构,要求添加一个 min函数,能够得到栈的最小元素2. 要求函数 min、push 以及 pop 的时间复杂度都是 O(1)思路: 构建一个辅助栈, 只有当前入栈的数据小于该辅助栈的栈顶元素时,才将其push到辅助栈, 保证辅助栈的栈顶元素总为最小,当出栈时,如果出栈元素大...
阅读全文
摘要:提高编程能力的最佳途径就是多写代码, 就让我们从现在开始吧!1.输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / | 6 14/ | / |4 8 12 16转换成双向链表4=6=8=10=12=14=16。二叉查找树的...
阅读全文

浙公网安备 33010602011771号