Java面向对象编程(20)

简介: Java面向对象编程(20)

对于顺序存储的线性表,访问结点和增加结点的时间复杂度为()。

A. O(n) O(n)

B. O(n) O(1)

C. O(1) O(n)

D. O(1) O(1)

答案:C

若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是( )。

A. top[1]+top[2]=m

B. top[1]+1=top[2]

C. top[2]-top[1]|=0

D. top[1]=top[2]

答案:B

下述有关栈和队列的区别,说法错误的是?

A. 栈是限定只能在表的一端进行插入和删除操作。

B. 队列是限定只能在表的一端进行插入和在另一端进行删除操作。

C. 栈和队列都属于线性表

D. 栈的插入操作时间复杂度都是o(1),队列的插入操作时间复杂度是o(n)

答案:D

从前有座山,山里有座庙,庙里有个老和尚,再给小和尚讲故事,故事内容是:从前有座山,山里有座庙,庙里有个老和尚,再给小和尚讲故事,故事内容是:从前有座 山,山里有座庙,庙里有个老和尚,再给小和尚讲故事,故事内容是……描述的是()

A. 贪心

B. 回溯

C. 穷举

D. 分治

E. 递归

答案:E

某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为() A. 不存在这样的二叉树

B. 200

C. 198

D. 199

答案:B

某二叉树的前序遍历序列与中序遍历序列相同,均为 ABCDEF ,则按层次输出(同一层从左到右)的序列为( )

A. ABCDEF

B. BCDEFA

C. FEDCBA

D. DEFABC

答案:A

初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为()

A. 8 3 2 5 1 6 4 7

B. 3 2 8 5 1 4 6 7

C. 3 8 2 5 1 6 7 4

D. 8 2 3 5 1 4 7 6

答案:A

解决散列法中出现冲突问题常采用的方法是()

A. 数字分析法、除余法、平方取中法

B. 数字分析法、除余法、线性探测法

C. 数字分析法、线性探测法、多重散列法

D. 线性探测法、多重散列法、链地址法

答案:D

以下哪种排序算法对(1,3,2,4,5,6,7,8,9)进行的排序最快()

A. 冒泡

B. 快排

C. 归并

D. 堆排

答案:A

以下数据结构中,()是非线性数据结构

A. 树

B. 字符串

C. 队

D. 栈

答案:A

字符串反转

题目描述:接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

输入描述:输入一行,为一个只包含小写字母的字符串。

输出描述:输出该字符串反转后的字符串。

输入:abcd

输出:dcba

方法1


public class Main33 {
    //字符串反转
    public static void main(String[] args) throws Exception{
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String str;
        //循环输入(多组输入)
        while ((str=reader.readLine()) !=null){
            //逆转 首尾元素交换
            char[] arr=str.toCharArray();
            int start=0;
            int end=arr.length-1;
            while (start <end){
                char tmp=arr[start];
                arr[start]=arr[end];
                arr[end]=tmp;
                start++;
                end--;
            }
            System.out.println(arr);
        }
    }
}

方法2


public class Main30 {
    //字符串翻转
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String str=scanner.nextLine();
        //翻转
        //栈
        Stack<Character> stack=new Stack<>();
        for (int i = 0; i < str.length(); i++) {
            stack.push(str.charAt(i));
        }
        StringBuilder stringBuilder=new StringBuilder();
        while ( !stack.isEmpty()){
            stringBuilder.append(stack.pop());
        }
        System.out.println(stringBuilder.toString());
    }
}

公共字串计算

题目描述:给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。

注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。

数据范围:字符串长度:1<=len<=150

进阶:时间复杂度:O(n^3) ,空间复杂度:O(N)

输入描述:输入两个只包含小写字母的字符串

输出描述:输出一个整数,代表最大公共子串的长度 补充说明: 示例 展开 示例1

public class Main32 {
    //公共字串计算
    public static int getMaxLen(String str1,String str2){
        char[] arr1=str1.toCharArray();
        char[] arr2=str2.toCharArray();
        int len1=arr1.length;
        int len2=arr2.length;
        int[][] maxSubLen=new int[len1+1][len2+1];
        int maxLen=0;
        for (int i = 1; i <= len1; ++i) {
            for (int j = 1; j <= len2 ; ++j) {
                if (arr1[i-1] ==arr2[j-1]){
                    //F(i,j) = F(i-1,j-1)+1
                    maxSubLen[i][j]=maxSubLen[i-1][j-1]+1;
                    //是否需要更新最大值
                    if (maxLen<maxSubLen[i-1][j-1]){
                        maxLen=maxSubLen[i][j];
                    }
                }
            }
        }
        return maxLen;
    }
    public static void main(String[] args) throws Exception{
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        String str1;
        String str2;
        while ((str1 =reader.readLine()) !=null){
            str2=reader.readLine();
            System.out.println(getMaxLen(str1,str2));
        }
    }
}
相关文章
|
3月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
41 7
|
3月前
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
48 5
|
3月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
5月前
|
Java
Java面向对象编程新篇章:多态,你准备好了吗?
【6月更文挑战第17天】Java的多态性是面向对象编程的核心,它允许通过统一的接口处理不同类型的对象。例如,在一个虚拟宠物游戏中,抽象类`Pet`定义了`speak()`方法,猫、狗和鹦鹉等子类各自重写此方法以实现独特叫声。在`main`方法中,使用`Pet`类型的引用创建子类对象并调用`speak()`,多态机制确保调用实际对象的方法,实现代码的灵活性和可扩展性。通过多态,我们能以更低的耦合度和更高的复用性编写更优雅的代码。
36 3
|
5月前
|
Java
Java 面向对象编程:父类与子类的“传承”与“创新”之路
【6月更文挑战第16天】Java 中的父类与子类展示了面向对象的“传承”与“创新”。子类`Dog`继承`Animal`,获取其属性和方法如`name`和`makeSound`。子类通过`@Override`增强`makeSound`,显示多态性。设计父类时应考虑普遍性,子类创新专注自身特性,遵循继承最佳实践,利用复用提升效率,构建可维护的软件系统。
152 57
|
3月前
|
存储 前端开发 JavaScript
【前端学java】面向对象编程基础-类的使用(4)
【8月更文挑战第9天】面向对象编程基础-类的使用
19 0
【前端学java】面向对象编程基础-类的使用(4)
|
3月前
|
Java 程序员 开发者
Java的面向对象编程:从基础到深入
【8月更文挑战第21天】在本文中,我们将探讨Java的面向对象编程(OOP)的核心概念,包括类、对象、继承、多态和封装。我们将通过实例和比喻,以通俗易懂的方式,深入理解这些概念的内涵和意义,以及它们如何影响我们的编程思维和实践。无论你是初学者还是有经验的开发者,这篇文章都将帮助你更深入地理解Java的OOP,并启发你思考如何在你的项目中应用这些概念。
|
4月前
|
Java API 项目管理
Java中的函数式编程与传统面向对象编程对比
Java中的函数式编程与传统面向对象编程对比
|
5月前
|
Java 安全 索引
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
【6月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
62 5
滚雪球学Java(48):面向对象编程中的StringBuffer类详解
|
5月前
|
存储 安全 Java
深入探讨 Java 封装机制:为何它是面向对象编程的核心?
【6月更文挑战第16天】Java的封装是OOP核心,它将数据和操作数据的方法打包在类中,隐藏实现细节并提供公共接口。例如,`Student`类封装了私有属性`name`和`age`,通过`get/set`方法安全访问。封装提升代码稳定性、可维护性和复用性,防止外部直接修改导致的错误,确保数据安全。它是面向对象编程优于传统编程的关键,促进高效、可靠的开发。
59 7