java面试代码题
java面试代码题
我是方小磊
这个作者很懒,什么都没留下…
展开
-
java面试代码题:查并集
查并集 题目如下: 如今有11个元素(1-10),我们设置一定的规则,例如输入<a,b>,则代表a,b属于一个集合,若此时还有规则输入<b,c>,则代表a,b,c属于同一个集合。 首先给定一系列的规则输入<a,b>,规定集合分布。 最后输入测试样例<x,y>,判断x,y是否属于一个集合 思路如下: 首先我们定义一个friendMap,其中存储:<x,y>表示x的根节点是y 首先存储以下内容: <1,1>,<2,2> ~原创 2021-04-26 22:00:24 · 178 阅读 · 0 评论 -
java面试代码题:实现字典树
概述 字典树的数据结构概述: private boolean flag :判断当前字符是不是叶子结点 private Node[] nodes:其实就是一个26位的数组,0-25分别代表a - z,不为空就代表有,为空就代表没有 private int sum:经过当前字符的次数 package test1; public class Trie { private static int Size = 26;//最多只有26个字母 private Node root;//根节点不存储原创 2021-04-25 20:47:37 · 110 阅读 · 0 评论 -
java面试代码题:多线程打印ABC
这里实现两种方式 使用synchronized加锁实现 先直接上实现: 定义ThreadA,ThreadB,ThreadC三个实现类: public class ThreadA extends Thread { static int count = 30; Thread c; public void seta( Thread c){ this.c = c; } @Override public void run() {原创 2021-04-25 20:00:19 · 158 阅读 · 0 评论 -
java面试代码题:计算汉明距离——腾讯
题目 思路 先使用XOR运算,然后统计结果中等于1的位数 这里采用右移位统计,每个位置都会被移动到最右边。移位后检查最右位的位是否为 1 即可。 检查最右位是否为 1,可以使用取模运算(i % 2)或者 AND 操作(i & 1),这两个操作都会屏蔽最右位以外的其他位。 注意:%2的就是可以直接取出最后一位,例如7(0111),7 %2 = 1;8(1000), 8 % 2 = 0; 题解 class Solution { public int hammingDistance(in原创 2021-04-19 12:01:58 · 136 阅读 · 0 评论 -
java笔试题:大小字母转换——腾讯
题目 给一个字符串,将大写字母转小写字母,小写字母转大写字母 题解 这里我转了一个StringBuffer去做,方便删除和插入 主要就是字符的转化,是需要加减对应的ASCLL码,小写字母的ASCLL大于对应大写字母的32 String str = "ABCssdGsU"; StringBuffer s = new StringBuffer(str); for(int i = 0; i < s.length(); i++){ if( s.原创 2021-04-19 11:48:13 · 144 阅读 · 0 评论 -
java笔试题:高精度乘法
高精度乘法 输入格式 两行,两个整数。 输出格式 一行一个整数表示乘积。 思路 其实高精度乘法的思路就是模拟正常的乘法 我们使用一个data二维矩阵存储乘法的中间结果 最后对data进行按列相加 举例说明 我们现在有两个乘数1234和95 int[] num1 = new int[]{1,2,3,4}; int[] num2 = new int[]{9,5}; 乘法需要将一个数放在上面,一个数放在下面。手算如下:我们默认将num2放在下面。 可以发现中间的计算结果就是一个二维矩阵 此时我们需要定义如原创 2021-04-15 21:24:14 · 454 阅读 · 0 评论 -
java笔试题:随机函数rand的变换问题
一.利用等概率Rand5产生等概率Rand3 分析:算法很简单,x是我们最终要输出的数字,只要它不在[0, 3)范围内,就不断地调用Rand5来更新它。 int Rand3() { int x; do { x = Rand5(); } while (x > 3); return x; } 二.利用等概率Rand5产生等概率Rand10 题:已有方法rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10生成 1 到 10转载 2021-04-12 19:56:48 · 388 阅读 · 0 评论 -
java笔试题:实现单例模式
单例模式的实现 java单例模式的实现分为五种: 饿汉模式(线程安全) 懒汉模式(线程不安全,但是可以修改,不建议使用,延迟加载) DCL双检查锁机制(线程安全,延迟加载) 静态内部类实现(线程安全,但是遇见序列化对象时会出现多实例情况,延迟加载) 枚举类实现(线程安全,不会出现序列化带来的问题,延迟加载) 1. 饿汉模式 优点:单例在类被加载的时候被创建,线程安全,可以用于多线程环境 缺点:如果单例未被使用,那么同样会被创建,会造成内存浪费 /** * 饿汉模式 * 在调用前就已经创建原创 2020-05-25 20:37:23 · 444 阅读 · 0 评论 -
java面(笔)试题:实现二分查找(java)
实现二分查找 样例输入:{1,3,5,7,9,10,30,58,90} 算法思路: 前提是数组有序 算法整体思路:由于数组是有有序的,每次取数组中间的元素,看是否查找到,如果查找到就返回。没有查找到就确定下次查找的方向是在左边的小数组中还是右边的小数组中 算法过程:F(begin,end,tagert) 初始begin = 0 end = 8 target = 10 样例输入:{1,3,5,7,9,10,30,58,90} 判断 N【mid】 = 9 < 10 所以 转向F(原创 2020-06-11 16:25:27 · 533 阅读 · 0 评论 -
java面(笔)试题:实现快速排序(java)
实现快速排序 例输入:{6 ,1 , 2 ,7 , 9 , 8 , 4 , 5 ,10 , 8} 算法大致思路 算法总体思路如下:每一轮排序中,每次都以第一个元素作为标准,将小于其元素的数放在左边,大于其元素放在右边。也就是说每经过一次排序,都确定了第一个数位置,并且以该数为分界线,将该数组分成了两个小数组。再将这两个小数组分别进行刚刚的排序即可。 算法过程:第一轮 双指针 begin = 0, end = 9, temp = N【begin】= 6 i = begin , j = en原创 2020-06-11 16:15:25 · 330 阅读 · 0 评论 -
java面试(笔)题:如何实现对象拷贝(克隆)(深拷贝和浅拷贝)——详解
文章目录如何实现对象克隆?1.答案:2.浅克隆和深克隆的区别3.实现Cloneable接口实现深克隆和浅克隆3.1 浅克隆实现3.2 深克隆实现4.实现Serializable接口,实现深克隆5.org.apache.commons中BeanUtils和PropertyUtils工具类实现深克隆 如何实现对象克隆? 1.答案: 答:有两种方式:(第三种可不答) 实现Cloneable接口并重写Object类中的clone()方法 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实原创 2020-05-12 15:16:50 · 920 阅读 · 0 评论 -
java笔试题:二叉树的前中后序遍历+层次遍历(迭代实现)
文章目录二叉树的前中后序遍历+层次遍历一. 二叉树的前序遍历二. 二叉树的中序遍历三.二叉树的后序遍历四. 二叉树的层次遍历 二叉树的前中后序遍历+层次遍历 二叉树的前中后序遍历都是用栈实现,而层次遍历则使用队列实现 一. 二叉树的前序遍历 思路: 前序遍历:根左右。也就是先遍历根节点,然后遍历左节点和右节点。 由于我们使用的是栈,栈是先入后出的,所以要先压右节点,再加左节点 所以我们整个的流程如下: 先入根节点 进入循环 (栈不为空) 出根节点 入右节点,入左节点 循环结束 //前序遍历 根原创 2021-04-07 21:55:30 · 253 阅读 · 0 评论 -
java笔试题:海量数据找最大或最小的k个数(堆排序)
题目 海量数据找最大或最小的k个数,这里以找最小的K个数为例 堆排序 例如给一个数组nums【】这棵树就是完全二叉树,则: nums【i】的左节点为:num【2 * i + 1】 nums【i】的右节点为:num【2 * i + 2】 这里简单说一下堆排序的流程: 第一步:将该数组调整为一个大(小)顶堆。即根节点元素永远大于左右节点。调整顺序是从倒数第一个非叶子节点(index = num.length / 2 - 1)开始。 进入循环,index = num.length / 2 - 1 调整堆原创 2021-04-15 16:51:14 · 575 阅读 · 0 评论