科大讯飞 笔试题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版
划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...
最新文章
- 是否能被3,5,7同时整除(3.4)(Java)
- JS监听手机物理返回键,返回到指定页面
- linux 使用split分割大文件
- hdu 1115(多边形重心)
- linux环境下中文乱码问题
- Elastic:为 Elasticsearch 启动 https 访问使数据访问更安全
- 怎么做mysql查询系统_mysql数据库系统学习(一)---一条SQL查询语句是如何执行的?...
- python预测发展趋势_Python中的趋势“预测器”?
- 学计算机学的想死,“我不是学习机器,真的好想死”
- ASP.NET 3.5核心编程学习笔记(17):基于数据源的数据绑定
- 关于NLP相关技术全部在这里:预训练模型、信息抽取、文本生成、知识图谱、对话系统...
- matlab知识集锦(3)
- PLSQL如何将千万数据快速插入到另一张表中_数据库设计中的 9 大常见错误
- Docker设置容器CPU、memory、磁盘IO资源限制
- 这才是晕了哟,dos之家上全是graybird???????????
- linux wr vi 命令,Linux下Vi命令详解
- 结构化随机森林 代码说明
- 2020Spatial-Temporal Graph Convolutional Network for Video-based Person Re-identification论文笔记(时空图卷积)
- Python爬取拉钩招聘网,用数据告诉你这类程序员最赚钱
- mysql 页分裂_[翻译] InnoDB 页合并与页分裂