科大讯飞 笔试题2021.8.15 Java版
- 1、将数的二进制表示中倒数第二个0改为1
- 2、求出字符串中包含26个字母的子串的最小长度,其中“?”可以代替其中一个字母
- 3、计算二叉树中距离为k的节点对的数量
1、将数的二进制表示中倒数第二个0改为1
如:10的二进制为1010,将倒数第二个0换为1后变为1110,结果为14
import java.util.ArrayList;
import java.util.List;/*** @author Jefft* @date 2021/8/15 19:38*/
public class Main {public int changeNumber (int num) {// write code here//10进制转为2进制List<Integer> list = new ArrayList<>();while (num != 0) {int i = num % 2;list.add(i);num /= 2;}//倒数第二个0转为1boolean isNum = false;//索引int index = -1;for (int i = 0;i < list.size();i++) {if (0 == list.get(i)) {if (!isNum) {isNum = true;continue;} else {index = i;break;}}}//2进制转10进制int res = 0;for (int i = 0;i < list.size();i++) {if (i == index || 1 == list.get(i)) {int n = 1;for (int j = 1;j <= i;j++) {n *= 2;}res += n;}}return res;}public static void main(String[] args) {Main main = new Main();int i = main.changeNumber(15);System.out.println(i); //90%}
}
2、求出字符串中包含26个字母的子串的最小长度,其中“?”可以代替其中一个字母
如:
“abcdefghijklmnopqrstuvw???abc”,结果为26
“abcdefghijklmnopqrstuvw?uvw??”,结果为29
import java.util.HashSet;
import java.util.Set;/*** @author Jefft* @date 2021/8/15 19:56*/
public class Main {public int findInterval (String str) {// write code hereint res = -1;boolean hashChange= false;for (int i = 0;i < str.length();i++) {int len = getLen(str, i);if (len != -1) {if (!hashChange) {res = len;hashChange = true;} else {res = Math.min(res, len);}}}return res;}public int getLen(String str, int index) {//Set去重,最后判断长度是否为26Set<Character> set = new HashSet<>();//应该到达的长度为26int len = 26;//从index开始遍历strfor (int i = index;i < str.length();i++) {//遇到?则len = len - 1if ('?' == str.charAt(i)) {len -= 1;} else {set.add(str.charAt(i));}//如果到达则返回if (set.size() == len) {return i - index + 1;}}return -1;}public static void main(String[] args) {Main main = new Main();int acb = main.findInterval("abcdefghijklmnopqrstuvw???abc");System.out.println(acb);}
}
3、计算二叉树中距离为k的节点对的数量
对于上面的树,若令k = 3,则输出2。因为距离为3的节点对只有(4,3)和(5,3)
import java.util.ArrayList;
import java.util.List;/*** @author Jefft* @date 2021/8/15 20:22*/
public class Main {//节点集合static List<List<Integer>> lists = new ArrayList<>();/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @param k int整型* @return int整型*/public int leafPairs (TreeNode root, int k) {// write code hereList<Integer> ll = new ArrayList<>();ll.add(-1);lists.add(ll);if (root.left != null) {goNode(root.left, 1, ll);}if (root.right != null) {goNode(root.right, 2, ll);}int res = 0;for (int i = 0;i < lists.size() - 1;i++) {List<Integer> l1 = lists.get(i);int len1 = l1.size();for (int j = 1;j < lists.size();j++) {int curLen = 0;List<Integer> l2 = lists.get(j);int len2 = l2.size();int i1 = 0,i2 = 0;while (i1 < len1 && i2 < len2) {if (l1.get(i1) != l2.get(i2)) {curLen += 2;}i1++;i2++;}//加上剩下的长度if (i1 >= len1) {curLen += len2 - i2;}if (i2 >= len2) {curLen += len1 - i1;}//符合加入if (curLen == k) {res += 1;}}}return res;}/**** @param node* @param leftOrRight 1 left ; 2 right* @param list*/public static void goNode(TreeNode node, int leftOrRight, List<Integer> list) {//创建新的集合List<Integer> nList = new ArrayList<>(list);nList.add(leftOrRight);//将该节点添加到集合中lists.add(nList);//若左右子树不为空,则向下递归if (node.left != null) {goNode(node.left, 1, nList);}if (node.right != null) {goNode(node.right, 2, nList);}}public static void main(String[] args) {TreeNode root = new TreeNode(1);TreeNode root2 = new TreeNode(2);TreeNode root3 = new TreeNode(3);TreeNode root4 = new TreeNode(4);TreeNode root5 = new TreeNode(5);root2.left = root4;root2.right = root5;root.left = root2;root.right = root3;Main main = new Main();int i = main.leafPairs(root, 3);System.out.println(i);}
}class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}
}
科大讯飞 笔试题2021.8.15 Java版相关推荐
- 网易游戏互娱 笔试题2021.8.7 Java版
1.身份证 2.比赛排名 1.身份证 import java.util.HashMap; import java.util.Map; import java.util.Scanner;/*** @au ...
- 美团笔试题2021.8.29(第四题求大佬解答)
美团笔试题2021.8.29 又再帮同学写,推了这周的周赛,侥幸都有点思路 丁香树 题目描述 思路 因为芳香值最大为30,所以用一个数组存储已走过的芳香值,然后走到第i个点,找比当前芳香值小的有多少个 ...
- 用友2020校招java笔试题_用友Java类笔试题大全
如下为大家汇总的是一份用友Java类笔试题,欢迎大家关注! 1.Hashtable和HashMap有什么区别? a.Hashtable是继承自陈旧的Dictionary类的,HashMap继承自Abs ...
- 记录一次Java笔试题记录一次Java笔试题
记录一次Java笔试题 一.下列语句片段,运行结果是 二.这段代码运行结果是多少? 三.Object中有哪些公共方法? 四.java中基本数据类型有哪些? 五.循环中使用break.continue. ...
- 南京大学计院夏令营历年机试笔试题汇总(刷题版)
温馨提示 必须熟悉输入输出,Java中是Scanner scan = new Scanner(System.in);(在Java.util包下) 必须熟悉各类集合框架,如HashMap.ArrayLi ...
- js下拉 selenium_selenium 常见面试题以及答案(Java版)
1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException 这样就可以使用try catch,如 ...
- java selenium_selenium 常见面试题以及答案(Java版)
1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException 这样就可以使用try catch,如 ...
- selenium 常见面试题以及答案(Java版)
1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException 这样就可以使用try catch,如 ...
- PAT 乙级 1046. 划拳(15) Java版
划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...
最新文章
- Java 二进制,八进制,十进制,十六进制
- man nfsd(rpc.nfsd中文手册)
- Netty学习笔记(一)
- 轻松清理系统垃圾[转]
- MySQL 同步(三)不同版本问题
- python读取大文件的某行_Python按行读取文件的实现方法【小文件和大文件读取】...
- .NET/C# 获取一个正在运行的进程的命令行参数
- 联信高效的数据传输机制
- HDU 4857 逃生 【拓扑排序+反向建图+优先队列】
- python设计模式六大原则_学习设计模式 - 六大基本原则之迪米特法则(示例代码)...
- json解析时遇到英文双引号报错解决
- NOIP模拟 位运算(trie树+按位贪心)
- Vue Router4路由
- excel文件运行报错(xx.xlsx)不是有效的win32应用程序
- 【※taskmgr.exe进程知识详解※电脑知识】
- 软件测试职位概要,系统测试工程师职位描述
- springboot快速搭建ftpserver服务端
- R语言学习笔记之str函数
- Skimage图像处理教程2)色彩空间变换
- JDK 8 JVM性能优化