友塔游戏技术岗笔试-4.17
先说结果:四题过了半题少一点。
结论:菜是原罪。
第一题:输入一个1000位以内的整数,再输入一个100以内的整数,求两数乘积。(具体题目不是这个,意思是这样,其他题目类似)
思路:大数相乘,原本大数加法都搞半天,直接跳过了。菜是原罪。
第二题:完全二叉树求n个节点的最近祖先节点。
输入:一个整数N表示完全二叉树的节点,接下来N个不重复的由大小写字母组成的节点值,再输入一个整数M表示需要查找的M个节点,接下来M个节点值。
输出:最近公共祖先。
思路:假定完全二叉树节点又一个下标,从1开始递增。比如完全二叉树A B C D E F G可以对应1,2,3,4,5,6,7。如果求E,F,G(5,6,7)的最近祖先,
只需要将对应的下标,即5,6,7转成二进制表示,找出这些二进制字符串的从头开始的最长公共子串,再将其转回整数,再找到整数(即下标)对应的map节点的key值。
结果:只过30%。最后放代码,是我写的唯一一题。菜是原罪。
第三题:一个整型数组,从左往右开始取值,后取到的数不能比前面大,求出和最大的取值(只要输出最大的和)。
思路:以为很简单,其实没思路。菜是原罪。
第四题:Dota英雄卡尔已经切好了三种元素(可以相同),剩下一些魔法值,求出卡尔接下来能最多使用多少个不同的技能。切换元素不消耗魔法,各种技能组合共十种(只有十种说明元素顺序与技能无关),每一种都需要各自的魔法值(值多少忘了,可以自己设定)。
第四题大概的意思是这样,因为我看到这里已经心里发慌了,写肯定是没写,自己脑补吧。菜是原罪。
以上就是我的菜之四重打击,我直到后面还有很多重,可能是跟自己年龄有关系吧,比较都29了,还TM本科毕业生,技术菜人老珠黄,其实我也不知道是不是年龄的问题,更多的是希望是自己菜的原因。这是第一次写面经,希望大家一起学习。最后附上第二题的代码,我今天早上又测试了几次,感觉没错呀。
package 友塔游戏;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String str;
Map<String ,Integer> map = new HashMap<>();
for(int i=1;i<=n;i++){
str = sc.next();
map.put(str,i);
}
int x = sc.nextInt();
String strings[] = new String[x];
for(int i=0;i<x;i++){
strings[i]=sc.next();
}
sc.close();
System.out.println(solution(map,strings));
}
public static String solution(Map<String,Integer> map,String[] strings ){
int n = strings.length;
String strArray[] = new String[n];
int tempNum = 0;
int minLenth = Integer.toBinaryString(map.get(strings[0])).length();
for(int i=0;i<n;i++){
int temp = map.get(strings[i]);
String tempStr = Integer.toBinaryString(temp);
if(minLenth>tempStr.length()){
minLenth=tempStr.length();
tempNum=i;
}
strArray[i]= tempStr;
}
String str = "1";
Boolean flag = true;
for(int i=1;i<tempNum;i++){
flag = true;
String temp = strArray[tempNum].substring(i,i+1);
for(int j=0;j<strArray.length;j++){
if(!strArray[j].substring(i,i+1).equals(temp)) {
flag=false;
break;
}
}
if(flag) str= str+temp;
}
int num = getBinaryStringNumber(str);
for(String string:map.keySet()){
if(map.get(string)==num) return string;
}
return null;
}
public static int getBinaryStringNumber(String string){
int re = 1;
char ch[] = string.toCharArray();
for (int i=1;i<ch.length;i++){
re = re*2+(ch[i]-'0');
}
return re;
}
}

查看23道真题和解析