整理8.18老虎笔试(纯记录自己的秋招笔试)
印象比较深的几个不确定、没做完或不会做的题目:
选择题有两题(以下两题各位大佬如果做得很溜的,欢迎评论让我这个菜菜学习一下):
1、以下函数的时间复杂度是 ( )
void func(int x,int y){
if(x<=0)
printf(“%d, %d\n”, y);
else
{
func(x-1,y+1);
func(x-1,y);
}
}
求递归函数的时间复杂度,借助栈来存储。
A.O(x*y)
B.O(x^2)
C.O(2^x)
D.O(x!)
参考答案:C
void func(int x,int y){
if(x<=0)
printf(“%d, %d\n”, y);
else
{
func(x-1,y+1);
func(x-1,y);
}
}
求递归函数的时间复杂度,借助栈来存储。
A.O(x*y)
B.O(x^2)
C.O(2^x)
D.O(x!)
参考答案:C
2、堆栈中有元素abcdef,每次出栈可以选择一个或者两个元素栈,当有两个元素出栈时可以选择其中一个重新入栈,则所有元素为空,那么可能的出栈方式有( )种?
A.23
B.22
C.21
D.20
E.19
F.18
参考答案:C
编程题3道,大体整理了一下,第2题“推多米诺”不太会,leetcode183,有比较好的思路的大佬欢迎评论指点。
A.23
B.22
C.21
D.20
E.19
F.18
参考答案:C
编程题3道,大体整理了一下,第2题“推多米诺”不太会,leetcode183,有比较好的思路的大佬欢迎评论指点。
1、输入的字符串只能是大写字母、小写字母和数字,求字符串中出现的数字最多的数字的和。
以下代码仅供参考,如果有更好的思路欢迎指点。
public static int MaxTimesSum(String str) {
int res = 0;
char[] chars = str.toCharArray();
int[] buc = new int[10];
for(int i = 0;i < chars.length;i++) {
if((chars[i] >= 'A' && chars[i] <= 'Z') || (chars[i] >= 'a' && chars[i] <= 'z')|| (chars[i] >= '0' && chars[i] <= '9')) {
if(chars[i] >= '0' && chars[i] <= '9') {
int num = (int)chars[i]-(int)'0';
++buc[num];
}else
continue;
}else {
System.out.println("输入的字符串不合法,必须是小写字母、大写字母或者数字");
}
}
int max = 0,maxIdx = 0;
for(int i = 0;i < buc.length;i++) {
if(buc[i] > max) {
max = buc[i];
maxIdx = i;
}
}
res = maxIdx * max;
return res;
}
2、“推多米诺”(leetcode183)
int res = 0;
char[] chars = str.toCharArray();
int[] buc = new int[10];
for(int i = 0;i < chars.length;i++) {
if((chars[i] >= 'A' && chars[i] <= 'Z') || (chars[i] >= 'a' && chars[i] <= 'z')|| (chars[i] >= '0' && chars[i] <= '9')) {
if(chars[i] >= '0' && chars[i] <= '9') {
int num = (int)chars[i]-(int)'0';
++buc[num];
}else
continue;
}else {
System.out.println("输入的字符串不合法,必须是小写字母、大写字母或者数字");
}
}
int max = 0,maxIdx = 0;
for(int i = 0;i < buc.length;i++) {
if(buc[i] > max) {
max = buc[i];
maxIdx = i;
}
}
res = maxIdx * max;
return res;
}
2、“推多米诺”(leetcode183)
3、输入罗马数字,输出整数(leetcode13)
以下代码仅供参考,如果有更好的思路欢迎指点。
public static int MaxTimesSum(String str) {
int res = 0;
char[] chars = str.toCharArray();
int[] buc = new int[10];
for(int i = 0;i < chars.length;i++) {
if((chars[i] >= 'A' && chars[i] <= 'Z') || (chars[i] >= 'a' && chars[i] <= 'z')|| (chars[i] >= '0' && chars[i] <= '9')) {
if(chars[i] >= '0' && chars[i] <= '9') {
int num = (int)chars[i]-(int)'0';
++buc[num];
}else
continue;
}else {
System.out.println("输入的字符串不合法,必须是小写字母、大写字母或者数字");
}
}
int max = 0,maxIdx = 0;
for(int i = 0;i < buc.length;i++) {
if(buc[i] > max) {
max = buc[i];
maxIdx = i;
}
}
res = maxIdx * max;
return res;
}
问答题:有一只股票,客户可自己设定一个值,当达到客户设定的值时主动推送提醒,这个功能的实现思路。
int res = 0;
char[] chars = str.toCharArray();
int[] buc = new int[10];
for(int i = 0;i < chars.length;i++) {
if((chars[i] >= 'A' && chars[i] <= 'Z') || (chars[i] >= 'a' && chars[i] <= 'z')|| (chars[i] >= '0' && chars[i] <= '9')) {
if(chars[i] >= '0' && chars[i] <= '9') {
int num = (int)chars[i]-(int)'0';
++buc[num];
}else
continue;
}else {
System.out.println("输入的字符串不合法,必须是小写字母、大写字母或者数字");
}
}
int max = 0,maxIdx = 0;
for(int i = 0;i < buc.length;i++) {
if(buc[i] > max) {
max = buc[i];
maxIdx = i;
}
}
res = maxIdx * max;
return res;
}
问答题:有一只股票,客户可自己设定一个值,当达到客户设定的值时主动推送提醒,这个功能的实现思路。
答得不太好,从消息中间件的角度说了,还有就是前台实现。
这题希望大佬们给出更多思路,帮我拓宽一下,谢谢。
#笔试题目##老虎集团#