腾讯音乐笔试 java,惨烈
#腾讯音乐娱乐笔试# 第一题 public int minOperations (String str) { // write code here char[] ch = str.toCharArray(); int[] dir = new int[26]; for(int i = 0;i< ch.length;i++){ dir[ch[i] - 'a']++; } int res = 0; int add = 0; for(int i = 0;i< dir.length;i++){ if(dir[i]>=2){ int a = dir[i] / 2; res += a; dir[i] -= a*2; //add= add+a; } if(add>0 && dir[i] == 0){ add--; dir[i]++; } } while(add>0){ for(int i = 0;i<dir.length;i++){ if(dir[i] == 0){ dir[i]++; add--; } } } while(add>0){ res++; add--; } return res; } 当时用的用的while()-2操作60%超时了,改成了现在这版忘记了把add+a写上了只过了60% 第二题 ArrayList list = new ArrayList<>(); public ArrayList<TreeNode> getBinaryTrees (ArrayList<Integer> preOrder, ArrayList<Integer> inOrder) { // write code here if(preOrder.size() == 1){ list.add(new TreeNode(preOrder.get(0)); } return process(preOrder,inOrder,0,preOrder.size() -1,0,preOrder.size() -1); } public TreeNode process(ArrayList<Integer> preOrder,ArrayList<Integer> InOrder,int pl,int pr,int il,int ir){ if(pl > pr|| il > ir){ return; } int val = preOrder.get(pl); TreeNode root = new TreeNode(val); int idx = 0; for(int i = il;i< ir;i++){ if(InOrder.get(i) == val){ idx = i; break; } root.left = process(preOrder,InOrder,pl + 1,pl +(idx - il),il,idx -1); root.right = process(preOrder,InOrder,pl + (idx - il)+1,pr,idx +1,ir); } return root; } 不知道怎么返回多个树,leetcode有原题啊,只是没这个重复值没过去 第三题 用的后序遍历 public int process(TreeNode root){ if(root == null){ return 0; } int left = process(root.left); int right = process(root.right); if(left == right){ root.val = root.left.val + root.right.val+1; }else{ root.val = root.left.val > root.right.val ? 2*root.left.val +1:root.right.val +1; } return root.val %(10^9+7); } } 测试用例都这么多溢出的吗,只过了10%,听过求高度也会溢出,用long 处理,被int 溢出坑到过好多次了,太难了
#腾讯音乐娱乐笔试##腾讯音乐2023秋招笔试心得体会#