太菜了,记录一下笔试题目,代码有更好解法欢迎分享。
1、满二叉子树的数量。
给定一颗二叉树,试求这课二叉树有多少个节点满足以该节点为根的子树是满二叉树?满二叉树指每一层都达到节点最大值。
第一行输入n表示节点数量,接下来n行第一个代表左儿子,第二个代表右儿子。

public class Main {static int res = 0;public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[][] nums = new int[n][2];for (int i = 0; i < n; i ++) {nums[i][0] = in.nextInt();nums[i][1] = in.nextInt();}new Main().isFullTree(nums, 1);System.out.println(res);}public int height(int[][] nums, int root) {if (root == -1) {return 0;}return Math.max(height(nums, nums[root - 1][0]), height(nums, nums[root - 1][1])) + 1;}public boolean isFullTree(int[][] nums, int root) {if (root == -1) {return true;}if (isFullTree(nums, nums[root - 1][0]) && isFullTree(nums, nums[root - 1][1]) && height(nums, nums[root - 1][0]) == height(nums, nums[root - 1][1])) {res ++;return true;} else {return false;}}
}

上述解法时间复杂度O(n),空间复杂度o()
另外,可以掌握根据数组进行二叉树建树

class TreeNode {TreeNode left;TreeNode right;int val;public TreeNode() {}public TreeNode(int val) {this.val = val;}public TreeNode (TreeNode left, TreeNode right, int val) {this.left = left;this.right = right;this.val = val;}
}public static void main(String[] args) {List<TreeNode> nodeList = new ArrayList<>();nodeList.add(null);for (int i = 1; i <= n; i ++) {nodeList.add(new TreeNode(i));}for (int i = 0; i < n; i ++) {if (nums[i][0] == -1) {nodeList.get(i + 1).left = null;} else {nodeList.get(i + 1).left = nodeList.get(nums[i][0]);}if (nums[i][1] == -1) {nodeList.get(i + 1).right = null;} else {nodeList.get(i + 1).right = nodeList.get(nums[i][1]);}}
}

2、三元组计数。
给定一个数组,计算有多少个三元组0<=i<j<k<n,且max(nums[i], nums[j], nums[k]) - min(nums[i], nums[j], nums[k]) = 1。
第一行输入n表示数组个数,第二行输入n个整数。

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}Arrays.sort(nums);Map<Integer, Integer> map = new HashMap<>();int res = 0;for (int i = 0; i < n; i ++) {map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);}for (int i = 0; i < n; i ++) {if (i > 0 && nums[i] == nums[i - 1]) {continue;}if (map.containsKey(nums[i] + 1)) {int low = map.get(nums[i]);int high = map.get(nums[i] + 1);if (low == 1 && high == 1) {continue;}if (high > 1) {res += low * high * (high - 1) / 2;}if (low > 1) {res += high * low * (low - 1) / 2;}}}System.out.println(res);
}

上述解法时间复杂度O(nlog(n)),空间复杂度O(n)。
3、乘2除2。
在n个元素的数组中选择k个元素,每个元素要么乘以2,要么除以2并向下取整,使得操作完后数组的极差尽可能小,并且输出极差。极差为最大值减去最小值。
第一行输入整数n和k。第二行输入n个整数表示数组。

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int k = scanner.nextInt();int[] nums = new int[n];for (int i = 0; i < n; i++) {nums[i] = scanner.nextInt();}Comparator<Integer> comparator = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1;}};Arrays.sort(nums);PriorityQueue<Integer> queueMin = new PriorityQueue<>(comparator);PriorityQueue<Integer> queueMid = new PriorityQueue<>(comparator);PriorityQueue<Integer> queueMax = new PriorityQueue<>(comparator);int minMin = Integer.MAX_VALUE, midMin = Integer.MAX_VALUE, maxMin = Integer.MAX_VALUE;for (int i = 0; i < k ; i ++) {minMin = Math.min(minMin, 2 * nums[i]);queueMin.add(2 * nums[i]);}for (int i = k; i < n; i ++) {midMin = Math.min(midMin, nums[i]);queueMid.add(nums[i]);}int res = Integer.MAX_VALUE;if (k == 0) {res = Math.min(res, queueMid.peek() - midMin);} else {res = Math.min(res, Math.max(queueMin.peek(), queueMid.peek()) - Math.min(minMin, midMin));}for (int i = 0; i < k; i ++) {int tempMin = queueMin.poll();queueMid.add(tempMin / 2);midMin = Math.min(midMin, tempMin / 2);int tempMid = queueMid.poll();queueMax.add(tempMid / 2);maxMin = Math.min(maxMin, tempMid / 2);if (i == k - 1) {res = Math.min(res, Math.max(queueMid.peek(), queueMax.peek()) - Math.min(Math.min(minMin, midMin), maxMin));} else {res = Math.min(res, Math.max(Math.max(queueMin.peek(), queueMid.peek()), queueMax.peek()) - Math.min(Math.min(minMin, midMin), maxMin));}}System.out.println(res);
}

上述解法时间复杂度O(nlog(n)),空间复杂度O(n)。

阿里笔试2023-3-15相关推荐

  1. 【阿里笔试+蘑菇街面试】向来缘浅,奈何情深

    2015-08-21 今晚阿里笔试,我报的业务型产品经理,7点开始,15分钟的不定性选择题,题目有关互联网.产品经理基本知识和逻辑推理题(类似行测),一共10题,时间绰绰有余,个别题可能有点纠结.然后 ...

  2. 阿里的下一个15年:大数据是核心

    阿里巴巴的上市让马云成功登上中国财富状元,但他却称"连自己小区的首富都不想当".马云表示,阿里上市后服务中小企业的初衷不会改变,会和千千万万个"小人物"共同成长 ...

  3. 阿里笔试之Java分词统计

    阿里笔试 原来计划的是昨天下午7:00到8:00进行的,结果刚看完乔司南敏捷的房子,回去之后和鹏伟 一起去吃火锅,所以只好把时间推迟到8:30,结构再次推迟到今天早晨9:00到10:00. 题目是这样 ...

  4. 20200415阿里笔试 Python3

    20200415阿里笔试 Python3 第一题 题目描述 示例输入 示例输出 题解: Python3 代码 第二题 题目描述 示例输入 示例输出 题解: Python3 代码 第一题 题目描述 n个 ...

  5. 博主在阿里笔试中拿了0分,竟是因为分不清楚 Java 输入类 nextLine 与 next 两个方法的区别

    前言 以前做算法题,都是实现一个方法,需要的参数会在方法参数中直接给出,而且需要的返回值直接在方法中 return 就好了.但是,这次阿里笔试,让博主遭遇百万点暴击,需要的参数居然要到输入流中读取,而 ...

  6. 23届秋招阿里笔试算法题

    import java.util.Scanner;//23届秋招阿里笔试第一题:二进制求解(100%) public class Main1 {public static void f1(int n) ...

  7. 关于更新win11 22H2后透明任务栏失效的解决方法.2023.03.15

    关于更新win11 22H2后透明任务栏失效的解决方法2023.03.15 [ViVe Tool下载地址]{Releases · thebookisclosed/ViVe (github.com)} ...

  8. 阿里笔试 8-28 字符串交换

    阿里笔试 题目一: 对于一个01字符串,每次只能任意交换两个元素,或者把0变成1,或者把1变成0,或者反转整个字符串.那么从A串变成B串至少需要多少步. 例子,1111000变成0010011至少需要 ...

  9. mulesoft MCIA 破釜沉舟备考 2023.02.15.07

    mulesoft MCIA 破釜沉舟备考 2023.02.15.07 1. What is not true about Mule Domain Project? 2. A project team ...

  10. 2023/7/15·一些设计模式(Java)

    2023/7/15·一些设计模式(Java) 1 · 单例模式 2 · 简单工厂模式 3 · 静态代理模式 4 · 适配器模式(类适配器) 5 · 原型模式 1 · 单例模式 单例模式 指某一个类只能 ...

最新文章

  1. ML之LiRSGDR:基于二种算法(LiR、SGDR)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能
  2. Revit Family API 添加参数与尺寸标注
  3. NYOJ 518 取球游戏
  4. OpenGL灰色滤镜
  5. 多线程相关的一些知识点
  6. Weka的-3.6.10的C4.5与Quinlan教授的C4.5算法的区别
  7. RUNOOB python练习题10
  8. 企业库(V4.1)入门学习手记
  9. python的一些基础小结总结
  10. 【C】输出乘法口诀表
  11. HTML转义字符大全(转)
  12. dtcms传递多个参数怎么获取
  13. 函数发生器的使用方法
  14. Nebula Graph 系列(1) —— 初识 Nebula
  15. 路由器注册灯闪烁没网络
  16. 【C++】球盒问题总结(八种情况)
  17. 基于深度卷积神经网络的图像超分辨率重建(SRCNN) 学习笔记
  18. 快速开发小程序——案例
  19. jq取html下拉框的值,jquery设置下拉框的值为空
  20. webpack 3/4踩坑,我太难了,从安装、卸载、到使用,各相应的版本号,sass-loader报错-版本的原因,webpack -v 不识别,没卸载干净...

热门文章

  1. 因为一个小功能,我对微信手机号转账的好感度加了10分
  2. 如何理解MPC模型预测控制理论
  3. PLC之六部十层电梯整体框架
  4. Material Theme on sublime text 3 一个用起来很好的Sublime主题
  5. 4.24 使用形状生成器工具绘制星形图标 [Illustrator CC教程]
  6. 关于caj格式文件保存后总会生成xml的问题
  7. ASP.NET2.0里的web.config配置接口API(转)
  8. PDF复制乱码 -- 原因及解决方案
  9. Java代码混淆案例(附反编译工具)
  10. 工具 | RaiDrive—将网盘映射为磁盘