猿辅导二面
- 介绍项目
- Redis的基本数据结构,Set怎么实现的,跳表的插入删除查询时间复杂度
- 一致性hash,作用是什么
- 负载均衡算法有哪些
编程题:一个数组前半部分升序后半部分降序,查找最大值。(1、4、7、8、3、2)
public class Main { public static void main(String[] args) { int[] nums = {1,4,7,8,3,2}; int i = 0, j = nums.length - 1; while(i <= j){ int mid = (i + j) / 2; int left = 0, right = 0; if(mid - 1 >= 0){ left = nums[mid - 1]; } if(mid + 1 < nums.length){ right = nums[mid + 1]; } if(nums[mid] > left && nums[mid] > right){ System.out.println(nums[mid]); break; } if(nums[mid] > left && nums[mid] < right){ i = mid + 1; }else{ j = mid - 1; } } } }编程题:节点取值0/1的二叉树,删除全部为0的叶子节点
private TreeNode solve(TreeNode root) { if (root == null){ return null; } root.left = solve(root.left); root.right = solve(root.right); if (root.left == null && root.right == null && root.val == 0){ return null; } return root; }第二题不太好写,不过面试官给了指导~