数据结构与算法刷题(三)

1、设有 一个二维数组 A [ m ][ n ] ,假设 A [0][0] 存放位置在 644 (10) , A [2][2] 存放位置在 676 (10) ,每个元素占一个空间,问 A [3][3] (10) 存放在什么位置?脚注 (10) 表示用 10 进制表示。
正确答案: C

A、688
B、678
C、692
D、696
解析:
由于矩阵为A[m][n], 可知每行有n个元素
根据A[0][0]和A[2][2]的角标及其存放的位置,可得如下方程:
                (2-0)*n+(2-0) = (676-644)*1
                                   n = 15
 设A[3][3]存放位置是p,则同样有方程:
                (3-0)*n+(3-0) = (p-644)*1
 带入n = 15,解得p = 692,由此可知选C

2、在表长为n的顺序表上做插入运算,平均要移动的结点数为( ) 。
正确答案: C

A、n/4
B、n/3
C、n/2
D、n
解析:假设长度为n数组a, 从数组最前(插到a[0]前)到最后(插到a[n-1]后)共n+1种情况,分别需要移动n,n-1,...,0次,每种情况等概率P=1/(n+1), 期望为(n+n-1+...+0)/(n+1) = (1+n)*n/2/(n+1)=n/2
3、下列属于容器的组件有()
正确答案: B

A、JButton
B、JPanel
C、Thread
D、JTextArea
解析:容器java.awt.Container是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形化界面的设计,以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。
有三种类型的容器:Window、Panel、ScrollPane,常用的有Panel, Frame, Apple

4、顺序表结构适宜于进行随机存取。
正确答案: A

A、正确
B、错误
解析:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中
5、What will be printed when you execute the following code?
class C {
    C() {
        System.out.print("C");
    }
}
 
class A {
    C c = new C();
 
    A() {
        this("A");
        System.out.print("A");
    }
 
    A(String s) {
        System.out.print(s);
    }
}
 
class Test extends A {
    Test() {
        super("B");
        System.out.print("B");
    }
 
    public static void main(String[] args) {
        new Test();
    }
}
正确答案: B
A、BB
B、CBB
C、BAB
D、None of the above
解析:首先new了一个子类对象,那么就要调用构造方法来初始化该子类对象,但是该类继承自A,所以要先调用父类的构造方法,这里通过super("B")显示的调用了父类的带参构造。执行父类的带参构造前要先对父类中的对象进行初始化,对父类中的c成员进行初始化,调用了C类的无参构造,所以调用顺序为:
先调用C类的无参构造
再调用A类的带参构造
最后调用调用子类的构造

6、对文件名为Test.java的java代码描述正确的是()
class Person {
    String name = "No name";
    public Person(String nm) {
        name = nm;
    }
}
class Employee extends Person {
    String empID = "0000";
    public Employee(String id) {
        empID = id;
    }
}
public class Test {
    public static void main(String args[]) {
        Employee e = new Employee("123");
        System.out.println(e.empID);
    }
}
正确答案: C
A、输出:0000
B、输出:123
C、编译报错
D、输出:No name
解析:子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
而父类没有无参的构造函数,所以子类需要在自己的构造函数中显示的调用父类的构造函数。添加super("nm");

7、以下哪个式子有可能在某个进制下成立()?
正确答案: A

A、13*14=204
B、12*34=568
C、14*14=140
D、1+1=3
解析:13*14=204
通过左右两边同时转化成十进制可快速判断,以八进制为例
左边转化成十进制:(1*8+3)*(1*8+4)=11*12=132
右边转化成十进制:(2*8^2+4)=132
即A正确

8、以下哪些选项可以获取ID为a的DOM元素?
正确答案: A D

A、document.getElementById('a')
B、document.getElementById('#a')
C、document.querySelector('a')
D、document.querySelector('#a')
解析:
A. getElementById() 方法可返回对拥有指定 ID 的第一个对象的引用。
语法:document.getElementById(id)
参数为id值。
D.querySelector() 方法返回文档中匹配指定 CSS 选择器的一个元素。
所以要获取ID为a的DOM元素,需要加上#+id名。也就是document.querySelector("#a");

9、链表和数组的区别。
正确答案: A B C

A、在有序的情况下搜索
B、插入和删除
C、随机访问
D、数据存储类型
解析:
链表:链表是一块不连续的动态空间,长度可变;链表需要按顺序检索节点,效率低;
链表的优点是可以快速插入和删除节点,大小动态分配,长度不固定。
链表不存在越界问题。
数组:数组是一快连续的空间,声明时长度就需要固定。
数组的优点是速度快,数据操作直接使用偏移地址。
数组有越界问题。

10、下列描述正确的是( )?
正确答案: A C

A、类不可以多继承而接口可以多实现
B、抽象类自身可以定义成员而接口不可以
C、抽象类和接口都不能被实例化
D、一个类可以有多个基类和多个基接口
解析:
1.java支持单继承,却可以实现多个接口。a对d错
2.接口没有构造方法,所以不能实例化,抽象类有构造方法,但是不是用来实例化的,是用来初始化的。c对
3.抽象类可以定义普通成员变量而接口不可以,但是抽象类和接口都可以定义静态成员变量,只是接口的静态成员变量要用static final public 来修饰。b错

编程题:1013

给定一个整数数组 A,只有我们可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。
形式上,如果我们可以找出索引 i+1 < j 且满足 (A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1]) 就可以将数组三等分。
示例 1:
输入:[0,2,1,-6,6,-7,9,1,2,0,1]
输出:true
解释:0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1
示例 2:
输入:[0,2,1,-6,6,7,9,-1,2,0,1]
输出:false
示例 3:
输入:[3,3,6,5,-2,2,5,1,-9,4]
输出:true
解释:3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4
提示:
3 <= A.length <= 50000
-10000 <= A[i] <= 10000

解法思路:1、先算出数组的总和sum。2、算出每部分的和key=sum/3。3、遍历数组,用key循环减数组遍历的数。4、当key=0时,定义变量temp++,key重新赋值sum/3。5、最后当temp=3是返回true,否则返回flase。

class Solution {
    public boolean canThreePartsEqualSum(int[] A) {
		//1.先算和sum sum/3 每个部分的和
		int sum=0;
		for(int num:A){
			sum+=num;
		}
		int key=sum/3;
		int temp=0;
		for(int i=0;i<A.length;i++){
			key-=A[i];
			if(key==0){
				temp++;
				key=sum/3;
			}
		}
		return temp==3;
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值