Java面向对象编程

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

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));

        }

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java是一种面向对象编程语言,因此Java编程是基于面向对象的思想进行的。面向对象编程是一种编程范式,它将现实世界中的概念和实体抽象成为对象,在程序中进行描述和处理。在Java中,每个对象都有自己的状态和行为,状态用变量表示,行为用方法表示。 在Java中,面向对象编程的三个核心概念是封装、继承和多态。封装指的是将数据和方法包装在一个类中,对外部隐藏实现细节,只暴露必要的接口;继承指的是通过扩展现有类的方式创建新类,新类可以继承现有类的所有属性和方法,并可以添加自己的特性;多态指的是同一个方法可以被不同的对象调用,产生不同的行为。 在Java中,面向对象编程通过类和对象来实现。类是一种模板,描述了一类对象的共同属性和行为。对象则是类的实例,具有该类所定义的属性和行为。在Java中,使用关键字class来定义类,使用关键字new来创建对象。例如,下面是一个简单的Java类的定义: ``` public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void sayHello() { System.out.println("Hello, my name is " + name + ", and I am " + age + " years old."); } } ``` 这个类有两个私有属性`name`和`age`,一个公有构造函数用来初始化对象的属性,还有一个公有方法`sayHello`用来输出对象的信息。创建对象的代码可以这样写: ``` Person p = new Person("John", 30); p.sayHello(); ``` 这段代码创建了一个名为`p`的`Person`对象,调用`sayHello`方法输出了对象的信息。 以上是Java面向对象编程的基本介绍,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念君思宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值