每日一题5

  1. 下面的程序 编译运行后,在屏幕上显示的结果是(A)
    public class test {
    public static void main(String args[]) {
    int x,y;
    x=5>>2;
    y=x>>>2;
    System.out.println(y);
    }
    }
    A 0
    B 2
    C 5
    D 80
    分析:移位运算符
    左移<< 最左侧丢掉,最右侧补0 相当于乘2^n
    右移>> 最右侧丢掉,最左侧补符号位(正数补0,负数补1)相当于÷(2^n)
    无符号右移>>>最右侧丢掉,最左侧补0
    如何将一个数字快速的扩大八位 即给一个数字左移3就可 n<<3
  2. 以下代码结果是什么?
    public class foo {
    public static void main(String sgf[]) {
    StringBuffer a=new StringBuffer(“A”);
    StringBuffer b=new StringBuffer(“B”);
    operate(a,b);
    System.out.println(a+”.”+b);
    }
    static void operate(StringBuffer x,StringBuffer y) {
    x.append(y);
    y=x;
    }
    }
    A 代码可以编译运行,输出“AB.AB”。
    B 代码可以编译运行,输出“A.A”。
    C 代码可以编译运行,输出“AB.B”。
    D 代码可以编译运行,输出“A.B”。
    我的回答: A (错误)
    正确答案: C
    在这里插入图片描述
    往方法中传参,传的仅仅只是地址,而不是实际内存,所以不要以为y=x程序的执行,是 b=a的执行。这两者是不相等的
  3. 装箱和拆箱
    装箱就是把基本类型用它们相应的引用类型包装起来,使其具有对象的性质。例如,Integer a = 10;
    而拆箱则是将引用类型的对象简化成值类型的数据,例如,b = new Integer(10);
    装箱拆箱操作是在值类型和引用类型之间进行转化
  4. 下列哪个说法是正确的(D)
    A ConcurrentHashMap使用synchronized关键字保证线程安全
    B HashMap实现了Collction接口
    C Array.asList方法返回java.util.ArrayList对象
    D SimpleDateFormat是线程不安全的
    解析:C选项,Arrays.asList()将一个数组转化为一个List对象,返回的这个ArrayList并不是java.util.ArrayList对象,而是Arrays类的静态内部类。
    A选项 ConcurrentHashMap使用分段加锁的机制确保安全,而不是synchronized关键字。
    B选项,看下源码,HashMap和Map和Collection集合没啥父子关系。
    public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
    public interface Map<K,V>
  5. 下列错误的是(D)
    A 虚拟机中没有泛型,只有普通类和普通方法
    B 所有泛型类的类型参数在编译时都会被擦除
    C 创建泛型对象时请指明类型,让编译器尽早的做参数检查
    D 泛型的类型擦除机制意味着不能在运行时动态获取List中T的实际类型
    因为编译时会自动擦除类型。泛型等同于Object。这种情况是没有办法在运行时获得泛型的具体类型。JVM是通过强大的反射机制获取具体类型的,也正因为有了反射才促生了泛型。
    JVM如何理解泛型概念 —— 类型擦除。事实上,JVM并不知道泛型,所有的泛型在编译阶段就已经被处理成了普通类和方法。
  6. 连续最大和
    一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3
    解题思路:经典dp问题
    假设dp[n]表示以n为最后一个元素的子数组和的最大值,
    因此,max(dp[i]) = getMax((dp[i-1]+arr[i]),arr[i]);
    不懂的话,可以看举例:
    在这里插入图片描述
    所以问题就变得简单了
public static int getMax(int a, int b){
        return a>b?a:b;
    }
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int size = scan.nextInt();
        int[] arr = new int[size];
        for(int i = 0;i< size;i++){
            arr[i] = scan.nextInt();
        }
        int max = arr[0];
        int sum = arr[0];
        for(int i=0;i<arr.length;i++){
            sum = getMax(sum+arr[i],arr[i]);
            if(sum >max){
              max = sum;
            }
        }
        System.out.println(max);
    }
  1. 回文字符串 abba
    “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。
    解题思路:使用暴力求解方式计算,遍历str1,将str2 insert进入str1的每个位置,判断是否是回文,这里注意的是,判断回文的时候,直接将字符串逆置,看是否相同就好了。是就++count;需要注意的是这里不能str1.insert(i, str2),这样的话str1改变了,判断下一个位置就不对了。所以每次使用str1重新给一个str,然后str.insert(i, str2),再判断。
 public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String a = scan.nextLine();
        String b = scan.nextLine();
        int len = a.length();
        int count =0;
        //1.遍历字符串 每个位置插入字母
        for(int i=0; i<=len;i++){
            StringBuffer str = new StringBuffer(a);
            str.insert(i,b);
             //2.逆置插完的字符串 与上一个比较
            StringBuffer tmp = new StringBuffer(str);
            StringBuffer str1 = tmp.reverse();
            //注意这里,不能直接StringBuilder str1 = str.reverse();
            //因为这样str本身又变了。
            if(str.toString().equals(str1.toString())){
                count++;
            }
        }
        System.out.println(count);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值