先说结果:四题过了半题少一点。
结论:菜是原罪。
第一题:输入一个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; } }
全部评论
(3) 回帖