6 面试中的各项能力
38 数字在排序数组中出现的次数¶
统计⼀个数字在排序数组中出现的次数。例如输⼊排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次, 因此输出4。
见34. Find First and Last Position of Element in Sorted Array。
39 ⼆叉树的深度¶
输⼊⼀棵⼆叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的⼀条路径,最长路径的长度为树的深度。
见LeetCode 104. Maximum Depth of Binary Tree
输⼊⼀棵⼆叉树的根结点,判断该树是不是平衡⼆叉树。如果某⼆叉树中任意结点的左右⼦树的深度相差不超过 1,那么它就是⼀棵平衡⼆叉树。
40 数组中只出现⼀次的数字¶
⼀个整型数组⾥除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现⼀次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
见LeetCode 260 Single Number III。
41 和为s的两个数字VS和为s的连续正数序列¶
和为s的两个数字¶
输⼊⼀个递增排序的数组和⼀个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s, 输出任意⼀对即可。
参见LeetCode 167. Two Sum II - Input array is sorted
为s的连续正数序列¶
输⼊⼀个正数s,打印出所有和为s的连续正数序列 (⾄少含有两个数)。例如输⼊15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~ 8。
42 翻转单词顺序 VS左旋转字符串¶
翻转单词顺序¶
输⼊⼀个英⽂句⼦,翻转句⼦中单词的顺序,但单 词内字符的顺序不变。为简单起见,标点符号和普通字母⼀样处理。例如输⼊字符串"I am a student. ",则输出"student. a am I"。
左旋转字符串¶
字符串的左旋转操作是把字符串前⾯的若⼲个字符 转移到字符串的尾部。请定义⼀个函数实现字符串左旋转操作的功能。⽐如输⼊字符串"abcdefg"和数字2,该函数将返回左旋转2 位得到的结果"cdefgab"。
43 n个骰⼦的点数¶
把n个骰⼦扔在地上,所有骰⼦朝上⼀⾯的点数之和为s。输⼊n,打印出s的所有可能的值出现的概率。
44 扑克牌的顺⼦¶
从扑克牌中随机抽5张牌,判断是不是⼀个顺⼦,即这5张牌是不是连续的。2~10为数字本⾝,A为1,J为11,Q为 12,K为13,⽽⼤、⼩王可以看成任意数字。
45 圆圈中最后剩下的数字¶
0,1,…,n-1这n个数字排成⼀个圆圈,从数字0开始每次从这个圆圈⾥删除第m个数字。求出这个圆圈⾥剩下的最后⼀个数字。
46 求1+2+…+n¶
求1+2+…+n,要求不能使⽤乘除法、for、while、 if、else、switch、case等关键字及条件判断语句(A?B:C)。
47 不⽤加减乘除做加法¶
写⼀个函数,求两个整数之和,要求在函数体内不得 使⽤+、-、×、÷四则运算符号。
48 不能被继承的类¶
⽤C++设计⼀个不能被继承的类。