2021.04.10 在线笔试
题型:4道编程题,2道问答题
一、问答题
(本人菜鸡,想知道标准答案的麻烦自己查哈哈哈!)
1.Java中的绑定是什么?静态绑定和动态绑定的区别?动态绑定的过程?
不知道。。。我按照泛型的理解硬编了一些字。
2.ArrayList和LinkedList的区别?
(1)ArrayList是基于数组的。LinkedList是基于链表的
(2)ArrayList有索引,所以查询比较快,增删比较慢。LinkedList需要一个节点一个节点找,所以查询比较慢,增删比较快。
(3)ArrayList基于数组,Java中数组长度不可变,如果超过容量需要扩容,而我们加入的元素往往并不能填满每一个位置,所以可能造成资源的浪费。LinkedList就不会。
(4)我觉得ArrayList比较常用
二、编程题
1、【问题描述】一家煎饼店,店主有2张5元,一张饼5元。确保正确找零,并且只要无法为一位顾客找零,整个生意就结束。给我们一个数组(表示顾客们有的现金),只有5、10、20元的钱。求最多能完成几次交易?
【示例代码】
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param bills int整型一维数组 顾客队列
* @return int整型
*/
public int billsChange (int[] bills) {
// write code here
int success = 0;
int five = 2;
int ten = 0;
for(int i = 0; i< bills.length;i++){
if(bills[i] == 5) {
five++;
success++;
}else if(bills[i] == 10) {
if(five > 0) {
five--;
ten++;
success++;
}else {
return success;
}
}else if(bills[i] == 20){
if((five>0 && ten>0)) {
five--;
ten--;
success++;
}else if(five>=3){
five-=3;
success++;
}else {
return success;
}
}
}
return success;
}
2、【问题描述】有0,1,2,3,4号5个充电桩,组成一个圆圈,每个充电桩能提供的电量用数组e表示,每个充电桩到下一个充电桩需要的电量用数组c表示,求是否能够完成一次绕圈?返回最小的起点序号,如果不能成功就返回-1。
【示例代码】
public int canCompleteRace (int[] e, int[] c) {
for (int begin = 0; begin < c.length-1; begin++) {
int have = 0;
boolean success = true;
for (int i = 0; i < e.length-1; i++) {
have += e[i];
if(have > c[i]) {
have -= c[i];
}else {
success = false;
break;
}
}
if(!success) {
//变换起点
int num = 0;
int newLast1 = e[0];
int newLast2 = c[0];
for (int i = 0; i < e.length-1; i++) {
e[i] = e[i+1];
c[i] = c[i+1];
}
e[e.length-1] = newLast1;
c[c.length-1] = newLast2;
}
if(success) {
return begin;
}
}
return -1;
}
3、4、没做出来。。
3是一个什么链表表示一个数,然后求两个链表的和。貌似需要我们自己写链表的数据结构。
4是一个最优选址。为我们提供一个二维数组,每一个有(城市1坐标,城市2坐标,两城市的距离),求哪个城市作为最优(距离最短)选址?