• 每日一练Day11


    一、单选

    1. 下面哪个标识符是合法的?

    A 9HelloWorld

    B _Hello World

    C Hello*World

    D Hello$World

    答案

    D

    解析:

    • Java标识符由字母、数字、_(下划线)、美元符号或人民币符号组成。
    • 不能由数字开头。
    • 关键字不能作为标识符

    2. 以下java程序代码,执行后的结果是()

    1. java.util.HashMap map=new java.util.HashMap();
    2. map.put("name",null);
    3. map.put("name","Jack");
    4. System.out.println(map.size());

    A 0

    B null

    C 1

    D 2

    答案

    C

    解析:map.size()返回 map 中元素的数量


    3. Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述错误的是

    A ArrayList和LinkedList均实现了List接口

    B ArrayList的访问速度比LinkedList快

    C 添加和删除元素时,ArrayList的表现更佳

    D HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值

    答案

    C

    解析:

    ArrayList 插入和现有项的删除开销很大时间复杂度 O(n),除非在尾部 O(1)
    LinkedList 插入和删除开销很小 时间复杂度 O(n),头部和尾部 O(1)
    HashMap可以用null值和空字符串作为K,不过只能有一个


    4. 以下描述正确的是

    A CallableStatement是PreparedStatement的父接口

    B PreparedStatement是CallableStatement的父接口

    C CallableStatement是Statement的父接口

    D PreparedStatement是Statement的父接口

    答案

    B

    解析:

    PreparedStatement 继承 Statement,CallableStatement 继承 PreparedStatement

    PreparedStatemen 是用来执行sql语句的与创建Statement不


    5. 下面有关重载函数的说法中正确的是

    A 重载函数必须具有不同的返回值类型

    B 重载函数形参个数必须不同

    C 重载函数必须有不同的形参列表

    D 重载函数名可以不同

    答案

    C


    6. 下列关于容器集合类的说法正确的是?

    A LinkedList继承自List

    B AbstractSet继承自Set

    C HashSet继承自AbstractSet

    D WeakMap继承自HashMap

    答案

    C

    解析:

    LinkedList 实现 List 接口
    AbstractSet 实现 Set 接口


    7. ArrayList list = new ArrayList(20);中的list扩充几次

    A 0

    B 1

    C 2

    D 3

    答案

    A

    解析:

    • ArrayList()构造一个初始容量为 10 的空列表。
    • ArrayList(Collection c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
    • ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。

    调用的是第三个构造函数,直接初始化为大小为20的list,没有扩容,所以选择A


    8. 以下程序的输出结果是?

    1. public class Example {
    2. String str = new String("good");
    3. char[] ch = { 'a', 'b', 'c' };
    4. public static void main(String args[]) {
    5. Example ex = new Example();
    6. ex.change(ex.str, ex.ch);
    7. System.out.print(ex.str + " and ");
    8. System.out.print(ex.ch);
    9. }
    10. public static void change(String str, char ch[])
    11. {
    12. str = "test ok";
    13. ch[0] = 'g';
    14. }
    15. }

    A good and abc

    B good and gbc

    C test ok and abc

    D test ok and gbc

    答案

    B

    解析:输出 str 和 ch,此时 str 还是指向 "good" 的,ch 还是指向之前的数组,但是数组内容已经被改变, str 是按值传递的,而 ch 是按地址传递的


    9. 下面的方法,当输入为2的时候返回值是多少?

    1. public static int getValue(int i) {
    2. int result = 0;
    3. switch (i) {
    4. case 1:
    5. result = result + i;
    6. case 2:
    7. result = result + i * 2;
    8. case 3:
    9. result = result + i * 3;
    10. }
    11. return result;
    12. }

    A 0

    B 2

    C 4

    D 10

    答案

    D

    解析:case 2、3 都没有 break,所以 2、3 都会进。


    10. 提供Java存取数据库能力的包是( )

    A java.sql

    B java.awt

    C java.lang

    D java.swing

    答案

    A

    解析:

    A java.sql 包提供Java存取数据库能力
    B java.awt 包是java图形界面的包
    C java.lang 是java语言的核心好,lang是language的简写
    D java.swing 是经过java封装的与操作系统无关的图形界面包


    二、编程

    1. 完善核心代码 标题:最近公共祖先 | 时间限制:3秒 | 内存限制:32768K | 语言限制:[Python, C++,

    C#, Java]

    将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。 设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。

    测试样例:

    2,3

    返回:1

    答案

    满二叉树的子节点与父节点之间的关系为 root = child / 2,利用这个关系,如果 a != b,就让其中的较大数除以2, 如此循环直到 a == b。满二叉图,如下图所示

    1. import java.util.*;
    2. public class LCA {
    3. public int getLCA(int a, int b) {
    4. while(a != b){
    5. if(a > b){
    6. a /= 2;
    7. }else {
    8. b /= 2;
    9. }
    10. }
    11. return a;
    12. }
    13. }

    2. ACM编程题 标题:求最大连续bit数 | 时间限制:1秒 | 内存限制:32768K

    求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1

    数据范围:数据组数: 1≤t≤5 , 1≤n≤500000

    进阶:时间复杂度: O(logn) ,空间复杂度: O(1)

    输入描述:

    输入一个int类型数字

    输出描述:

    输出转成二进制之后连续1的个数

    示例1:

    输入

    200

    输出

    2

    说明

    200的二进制表示是11001000,最多有2个连续的1。

    答案

    方法 1: Java 直接用位运算符 &,用当前数字和 1 做“&”操作,如果结果是1,说明此时的二进制第一位为1,然后右移一位,直至数字为0。
    注意java的 >> 是有符号右移,也就是说,负数用 >> 右移的话,会在左侧补1而不是0,这就会影响最终对1的计数。所以这里我们要使用无符号右移 >>>

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. // 用位运算符& 1&1 = 1 一位一位的与1比较,比较后将n右1
    5. Scanner in = new Scanner(System.in);
    6. int n = in.nextInt();
    7. int count = 0;
    8. int max = 0;
    9. while( n != 0){
    10. if( (n & 1) == 1){
    11. count ++;
    12. max = Math.max(max,count);
    13. }else{
    14. count = 0;
    15. }
    16. n >>>= 1;
    17. }
    18. System.out.print(max);
    19. }
    20. }

    方法 2:将数字转为二进制字符串,再将二进制字符串按 "0" 分割

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner in = new Scanner(System.in);
    5. while (in.hasNextInt()) {
    6. int n = in.nextInt();
    7. // 转为二进制字符串
    8. String binaryStr = Integer.toBinaryString(n);
    9. // 分割
    10. String[] str = binaryStr.split("0");
    11. int max = 0;
    12. for(int i = 0; i < str.length;i++ ){
    13. if(str[i].length() > max){
    14. max = str[i].length();
    15. }
    16. }
    17. System.out.print(max);
    18. }
    19. }
    20. }

  • 相关阅读:
    目前为止 DAO靠什么盈利?
    线稿图视频制作--从此短视频平台不缺上传视频了
    win10 lua环境搭建
    信创云:打造自主可控云基础设施 | 厂商征集
    银行的商业模式分析
    2023年,新手如何玩赚互联网项目?
    GBase 8a MPP集群管理之虚拟集群镜像表
    穷人版生产力工具,好用得飞起 「GitHub 热点速览」
    遇到这些题你知道用什么来解么?
    .Net Nullable reference types(可为空引用类型)
  • 原文地址:https://blog.csdn.net/m0_65819602/article/details/133958146