目录
选择题
1.
2.
3.
二叉链表可以理解为左右孩子表示法。
循环队列用的是数组存储数据。
4.
AVL 树也叫做平衡二叉搜索树,哈夫曼树是带权值的树(与元素大小顺序无关)。
5.
6.
希尔排序时间复杂度不确定。
快速排序最坏情况是数据基本有序,会退化成单分支的树,时间复杂度为 O(n^2) ,
堆排序是固定的 O(nlogn)
冒泡排序最坏情况下时间复杂度为 O(n^2)
7.
编程题
1. MP3光标位置
就,按照题目说的做即可。
代码实现:
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
String orders = in.next();
moveMouse(n, orders);
}
}
public static void moveMouse(int n, String orders) {
// 鼠标所在页的起始位置
int first = 1;
// 鼠标所选中的歌曲
int mouse = 1;
// 歌曲总数<=4的时候,不需要翻页,只是挪动光标位置
if (n <= 4) {
for (int i = 0; i < orders.length(); i++) {
char order = orders.charAt(i);
// 光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲
if (mouse == 1 && order == 'U') {
mouse = n;
}
// 光标在最后一首歌曲时,按Down键光标挪到第一首歌曲
else if (mouse == n && order == 'D') {
mouse = 1;
}
// 其他情况下用户按Up键,光标挪到上一首歌曲
else if (order == 'U') {
mouse--;
}
// 用户按Down键,光标挪到下一首歌曲
else if (order == 'D') {
mouse++;
}
}
// 打印列表
for (int i = 1; i < n; i++) {
System.out.print(i + " ");
}
System.out.println(n);
// 打印鼠标
System.out.println(mouse);
}
// 歌曲总数大于4的时候
else {
for (int i = 0; i < orders.length(); i++) {
char order = orders.charAt(i);
// 屏幕显示的是第一页(即显示第1 – 4首)时,
// 光标在第一首歌曲上,用户按Up键后,
// 屏幕要显示最后一页(即显示第7-10首歌),同时光标放到最后一首歌上。
if (first == 1 && mouse == 1 && order == 'U') {
first = n - 3;
mouse = n;
}
// 屏幕显示最后一页时,光标在最后一首歌曲上,
// 用户按Down键,屏幕要显示第一页,光标挪到第一首歌上。
else if (first == n - 3 && mouse == n && order == 'D') {
first = 1;
mouse = 1;
}
// 屏幕显示的不是第一页时,光标在当前屏幕显示的第一首歌曲时,
// 用户按Up键后,屏幕从当前歌曲的上一首开始显示,光标也挪到上一首歌曲
else if (first != 1 && mouse == first && order == 'U') {
mouse--;
first--;
}
// 屏幕显示的不是第一页时,光标在当前屏幕显示的第最后一首首歌曲时,
// 用户按Down键后,屏幕从当前歌曲的下一首开始显示,光标也挪到下一首歌曲
// 光标当前屏幕的最后一首歌时的Down键处理也类似。
// 特殊情况,不能在最后一页,如果在最后一页,那就没得拼了,会越界
else if (first != n - 3 && mouse == first + 3 && order == 'D') {
mouse++;
first++;
}
// 其他情况下用户按Up键,光标挪到上一首歌曲
else if (order == 'U') {
mouse--;
}
// 用户按Down键,光标挪到下一首歌曲
else if (order == 'D') {
mouse++;
}
}
// 打印列表
for (int i = first; i < first + 3; i++) {
System.out.print(i + " ");
}
System.out.println(first + 3);
// 打印鼠标
System.out.println(mouse);
}
}
}