• Java面向对象编程


    设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度()

    A. O(log2n)

    B. O(1)

    C. O(n2)

    D. O(n)

    答案:D

    一个栈的初始状态为空。首先将元素5,4,3,2,1 依次入栈,然后退栈一次,再将元素A,B,C,D依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的 元素)的顺序为()

    A. 1DCAB2345

    B. 1DCBA2345

    C. 54321ABCD

    D. DCBA12345

    答案:B

    设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次压入栈S,一个元素出栈后即进入队列Q,若出队列的顺序为e2,e4,e3,e6,e5,e1则栈S的容量要求最小值 为()

    A. 2

    B. 3

    C. 4

    D. 5

    答案:B

    给定下列程序,那么执行printf("%d\n", foo(20, 13));的输出结果是()

    1. int foo(int x, int y){
    2. if (x <= 0 || y <= 0)
    3. return 1;
    4. return 3 * foo( x-6, y/2 );
    5. }

    A. 3

    B. 9

    C. 27

    D. 81

    答案:D

    在具有 2n 个结点的完全二叉树中,叶子结点个数为()

    A. n

    B. n+1

    C. n-1

    D. n/2

    答案:A

    下列叙述中错误的是( )

    A. 二叉链表是二叉树的存储结构

    B. 循环链表是循环队列的存储结构

    C. 栈是线性结构

    D. 循环队列是队列的存储结构

    答案:B

    下述二叉树中,哪一种满足性质:从任一结点出发到根的路径上所经过的结点序列按其关键字有序()

    A. 二叉排序树

    B. 哈夫曼树

    C. AVL树

    D. 堆

    答案:D

    为提高散列(Hash)表的查找效率,可以采取的正确措施是( ) Ⅰ.增大装填(载)因子 Ⅱ.设计冲突(碰撞)少的散列函数 Ⅲ.处理冲突(碰撞)时避免产生聚集(堆积)现象

    A. 仅Ⅰ

    B. 仅Ⅱ

    C. 仅Ⅰ、 Ⅱ

    D. 仅Ⅱ、 Ⅲ

    答案:D

    将整数数组(7-6-3-5-4-1-2)按照堆排序的方式原地进行升序排列,请问在第一轮排序结束之后,数组的顺序是()

    A. 2-6-3-5-4-1-7

    B. 6-2-3-5-4-1-7

    C. 6-5-3-2-4-1-7

    D. 1-4-7-5-6-3-2

    答案:C

    下列各排序法中,最坏情况下的时间复杂度最低的是( )

    A. 希尔排序

    B. 快速排序

    C. 堆排序

    D. 冒泡排序

    答案:C

    洗牌
    题目描述:洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n 张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的 最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌,最开始 牌的序列是1,2,3,4,5,6。首先分成两组,左手拿着1,2,3;右手拿着4,5,6。在洗牌过程中按顺序放下了6,3,5,2,4,1。把这六张牌再次合成一组牌之后,我们按照从 上往下的顺序看这组牌,就变成了序列1,4,2,5,3,6。 现在给出一个原始牌组,请输出这副牌洗牌k次之后从上往下的序列。 
    输入描述:第一行一个数T(T ≤ 100),表示数据组数。对于每组数据,第一行两个数n,k(1 ≤ n,k ≤ 100),接下来一行有2n个数a1,a2,...,a2n(1 ≤ ai ≤ 1000000000)。表示原始牌组从上到下的序列。
     输出描述:对于每组数据,输出一行,最终的序列。数字之间用空格隔开,不要在行末输出多余的空格。 
    
     
    
    public class Main34 {
    
        //洗牌
    
        public static void printCard(int[] cards){
    
            for (int i = 0; i < cards.length-1; ++i) {
    
                System.out.print(cards[i]+" ");
    
            }
    
            System.out.println(cards[cards.length-1]);
    
        }
    
    
    
        public static void playCard(int[] cards,int n,int k){
    
            //i-->2*i
    
            //i+n-->2*i+1
    
            for (int i = 0; i < k; ++i) {
    
                //一次洗牌的过程
    
                int[] newCards=new int[cards.length];
    
                for (int j = 0; j < n; ++j) {
    
                    newCards[2*j]=cards[j];
    
                    newCards[2*j+1]=cards[j+n];
    
                }
    
                cards=newCards;
    
            }
    
            //从上往下打印
    
            printCard(cards);
    
        }
    
    
    
        public static void main(String[] args) {
    
            Scanner scanner=new Scanner(System.in);
    
            int groups=scanner.nextInt();
    
            for (int i = 0; i < groups; ++i) {
    
                //读入每组数据
    
                int n=scanner.nextInt();
    
                int k=scanner.nextInt();
    
                int[] cards=new int[2*n];
    
                for (int j = 0; j < 2*n; ++j) {
    
                    cards[j]=scanner.nextInt();
    
                }
    
                //洗牌
    
                playCard(cards,n,k);
    
            }
    
        }
    
    }
    
    
    
    MP3光标位置

    链接:MP3光标位置__牛客网
    来源:牛客网
     

    MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌。

    现在要实现通过上下键控制光标移动来浏览歌曲列表,控制逻辑如下:

    1. 歌曲总数<=4的时候,不需要翻页,只是挪动光标位置。

    光标在第一首歌曲上时,按Up键光标挪到最后一首歌曲;光标在最后一首歌曲时,按Down键光标挪到第一首歌曲。

    特殊翻页:屏幕显示的是第一页(即显示第1 – 4首)时,光标在第一首歌曲上,用户按Up键后,屏幕要显示最后一页(即显示第7-10首歌),同时光标放到最后一首歌上。同样的,屏幕显示最后一页时,光标在最后一首歌曲上,用户按Down键,屏幕要显示第一页,光标挪到第一首歌上。

    其他情况,不用翻页,只是挪动光标就行。

    数据范围:命令长度1≤s≤100 1\le s\le 100\ 1≤s≤100 ,歌曲数量1≤n≤150 1\le n \le 150\ 1≤n≤150 

    进阶:时间复杂度:O(n) O(n)\ O(n) ,空间复杂度:O(n) O(n)\ O(n) 

     
    输入描述:

    输入说明:
    1 输入歌曲数量
    2 输入命令 U或者D

     
    输出描述:

    输出说明
    1 输出当前列表
    2 输出当前选中歌曲

    示例1

    输入

    10
    UUUU
    

    输出

    7 8 9 10
    7
    1. import java.util.*;
    2. public class Main {
    3. public static void MP3PlayerLow4(String str, int n) {
    4. char[] ch = str.toCharArray();
    5. int begin = 1, cur = 1; // 起始序号,当前歌曲序号
    6. for (int i = 0; i < ch.length; i++) {
    7. if (cur == 1 && ch[i] == 'U') { // 光标在第一首歌曲上时,按Up键光标
    8. cur = n;
    9. continue;
    10. }
    11. if (cur == n && ch[i] == 'D') { // 光标在最后一首歌曲时,按Down键光标
    12. cur = 1;
    13. continue;
    14. }
    15. if (ch[i] == 'U') {
    16. cur -= 1;
    17. }
    18. if (ch[i] == 'D') {
    19. cur += 1;
    20. }
    21. }
    22. for (int i = 0; i < n; i++) {
    23. if (i==0) {
    24. System.out.print(begin);
    25. }else{
    26. System.out.print(" "+(begin+i));
    27. }
    28. }
    29. System.out.println();
    30. System.out.println(cur);
    31. }
    32. public static void MP3PlayerUp4(String str, int n) {
    33. char[] ch = str.toCharArray();
    34. int begin = 1, cur = 1; // 起始序号,当前歌曲序号
    35. for (int i = 0; i < ch.length; i++) {
    36. if (begin==1 && cur == 1 && ch[i] == 'U') { // 光标在第一页 ,第一首歌曲上时,按Up键光标
    37. cur = n;
    38. begin = n-3;
    39. continue;
    40. }
    41. if (begin==n-3 && cur == n && ch[i] == 'D') { // 光标在最后一页,最后一首歌曲时,按Down键光标
    42. cur = 1;
    43. begin = 1;
    44. continue;
    45. }
    46. if (ch[i] == 'U' && begin==cur ) { // 光标在非第一页,第一首歌曲时,按Up键后,从当前歌曲的上一首开始显示,光标也挪到上一首歌曲。
    47. cur -= 1;
    48. begin-= 1;
    49. continue;
    50. }
    51. if (ch[i] == 'D' && begin+3==cur) {
    52. cur += 1;
    53. begin+= 1;
    54. continue;
    55. }
    56. if(ch[i] == 'U'){
    57. cur -= 1;
    58. }else{
    59. cur += 1;
    60. }
    61. }
    62. System.out.println(begin + " " + (begin + 1) + " " + (begin + 2)+ " " + (begin + 3));
    63. System.out.println(cur);
    64. }
    65. public static void main(String[] args) {
    66. Scanner input = new Scanner(System.in);
    67. while (input.hasNextInt()) {
    68. int n = input.nextInt(); // 歌曲数量
    69. String str = input.next(); // 操作序列
    70. if (n<=4)
    71. MP3PlayerLow4(str, n);
    72. else
    73. MP3PlayerUp4(str, n);
    74. }
    75. }
    76. }

  • 相关阅读:
    购买阿里云RDS
    RocketMQ源码阅读(七)ConsumeQueue和IndexFile
    【Go blog】Govulncheck v1.0.0 发布了!
    【记录】Discuz!论坛防灌水防注册机,清理垃圾会员
    原来Stable Diffusion是这样工作的
    java-net-php-python-s2sh教学管理平台hsg8229AGA2修改回复计算机毕业设计程序
    Guetzli的原理
    Object.entries()
    Java开发快递物流项目
    UE4 C++:UPROPERTY宏、属性说明符、元数据说明符
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/132926455