笔试强训 day1

选择题纠错:

A. java.io.Serializable 表示序列化,是一个空接口,也就是说这个接口没有声明任何的方法,所以实现这个接口的类也不需要实现任何方法。

B. java.lang.Cloneable 是一个"标记接口",内部无任何方法、变量. 
    用于标记"可克隆的java对象",表示当前对象可重写Object.clone()

C. 1.CharSequence类是java.lang包下的一个接口,此接口对多种不同的对char访问的统一接口,像String、StringBuffer、StringBuilder类都是CharSequence的子接口;

     2.CharSequence类和String类都可以定义字符串,但是String定义的字符串只能读,CharSequence定义的字符串是可读可写的;

      3.对于抽象类或者接口来说不可以直接使用new的方式创建对象,但是可以直接给它的实例赋值;

                例如:CharSequence cs = “a”;

       4.CharSequence 接口中重新定义了 toString()方法,表示实现它的类必须重写该方法。

 D.Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,       类的 compareTo 方法被称为它的自然比较方法。

 面向对象的主要特征:封装,继承,多态

结构化程序设计原则:自顶向下,模块化,逐步求精

 A. i 属于成员变量,通过对象的引用来访问是可以的

C. A 是类名,类名去访问方法,除非这个方法是静态方法(非静态变量或非静态方法无法通过类名直接调用)

D. static 关键字修饰的变量或者方法可以通过类名直接调用

编程题:

 

 思路:队伍的水平值等于该队伍队员中的第二高水平值,为了所有队伍的水平值总和最大的解法,也就是说每个队伍的第二个值是尽可能大的值。

 所以我们可以先将输入的一组数进行排序 

eg1 : 5 2 8 5 1 5   排序后  1      2      5      5     5      8   

所以可以取最小的和最大的和次大的为一组   1   5  8  此时保证该组第二值尽可能大

剩下的 2 5 5分为一组  

此时水平值总和的最大值就是 5 + 5 = 10


eg2: 9 7 6 8 2 1 3 4 5  排序后  1 2 3 4 5 6 7 8 9

所以第一组为  1 8 9    (取排序后最小值,最大值和次大值)    水平值为 8

第二组 为 2 6 7    (同第一组取法)     水平值为 6 

第三组 为 3 4 5     水平值为4 

此时水平值总和最大值为  8 + 6 + 4 = 18 


代码如何实现,此时需要找关系:

eg1 中 1 2 5 5 5 8 

看为数组则下标是   1    2    5    5    5    8

                               [0]  [1]  [2]  [3]  [4]  [5]

第一组   1     5     8            此时队伍水平值 5 的下标是 [4] 

             [0]   [4]   [5]    

第二组    2     5     5           此时队伍水平值 5 的下标是 [2]

              [1]   [2]   [3]

此时输入的 n = 2;

所以下标关系是  arr.length - 2 * (i + 1)    i 的取值是 [0,n)

验证 : i = 0 时  下标是 6 - 2 *(0 + 1) = 4

             i = 1 时  下标是 6 - 2 * (1 + 1) = 2


eg2 中:1 2 3 4 5 6 7 8 9

n = 3

arr.length = 9

下标关系是  arr.length - 2 * (i + 1)    i 的取值是 [0,n)

第一组    1  8  9    队伍水平值 8 的下标是 [7]

第二组    2  6  7    队伍水平值 6 的下标是 [5]

第三组    3  4  5    队伍水平值 4 的下标是 [3]

带公式验证

i = 0 时   下标为 9 - 2 * (0 + 1) = 7

i = 1 时   下标为 9 - 2 * (1 + 1) = 5

i = 0 时   下标为 9 - 2 * (2 + 1) = 3


代码如下:


 思路:将字符串中的字符截取出来 利用 split()方法,然后用 contains() 方法进行比较,如果输入的第二个字符串中包含有第一个字符串中的字符,就舍弃掉,如果不包含,则使用 StringBuilder 的 append() 方法进行拼接!

补充:contains() 方法 : 如果字符串中包含相等的字符串或者字符时 返回 true.

eg:  String s1 = "hello world";

       String s2  = "llo";

       String s3 = "what"

       boolean b = s1.contains(s2);

      boolean c = s1.contains(s2);

则输出 b 为 true ,    c 为 false


代码实现:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值