【笔试训练】排序子序列和倒置字符串

news2024/11/22 19:16:11

目录

一、选择题

二、倒置字符串


一、选择题

一、A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:

1. A a0=new A();

2. A a1=new B();

3. A a2=new C();

问以下哪个说法是正确的(D

A. 只有第一行能通过编译

B. 第1、2行能通过编译,但第3行编译出错

C. 第1、2、3行能通过编译,但第2、3行运行时出错

D. 第1行,第2行和第3行的声明都是正确的


答案:选D

 因为B继承自A,C继承自B,也可以认为C继承了A。相当于你爸爸继承了你爷爷的一些特点,而你继承了你爸爸的特点,间接的你也继承了你爷爷的特点。

二、下面代码将输出什么内容:(B

public class SystemUtil{
     public static boolean isAdmin(String userId){
         return userId.toLowerCase()=="admin";
     }
     public static void main(String[] args){
         System.out.println(isAdmin("Admin"));
     }
}

 A. true    B. false     C. 1     D. 编译错误 


答案:B

字符串是一个引用类型,所以比较两个字符串是否相等需要使用equals方法,这里使用==比较,比较的是两个字符串的地址。

三、 阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有(D

package NowCoder;
class Test {
     public static void hello() {
         System.out.println("hello");
    }
}
public class MyApplication {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Test test=null;
        test.hello();
    }
}

A. 能编译通过,并正确运行

B. 因为使用了未初始化的变量,所以不能编译通过

C. 以错误的方式访问了静态方法

D. 能编译通过,但因变量为null,不能正常运行


答案:D

这里是因为hello是属于类的方法,不能借助对象来调用,但是这个引用指向的对象为null,

所以这里test调用hello方法,是可以执行的,并没有借助对象来调用。

四、下列哪一种叙述是正确的(D

A. abstract修饰符可修饰字段、方法和类

B. 抽象方法的body部分必须用一对大括号{ }包住

C. 声明抽象方法,大括号可有可无

D. 声明抽象方法不可写出大括号


答案:D

abstract可以修饰类和方法,但是不能修饰成员变量。

声明抽象方法,有访问限定修饰符、返回值类型、方法名,但是不能有方法体,也就是{}。

五、如下代码的执行结果是什么(B

class Base {
     Base() {
         System.out.print("Base"); 
     }
}
public class Alpha extends Base {
     public static void main( String[] args ) {
         new Alpha();
         //调用父类无参的构造方法
         new Base();
     } 
}

 A. Base    B. BaseBase     C. 编译失败      D. 代码运行但没有输出     E. 运行时抛出异常


答案B

因为在创建子类继承父类的时候,即使子类中没有写构造方法,在创建子类对象的时候,调用的无参构造方法,也会首先调用父类的构造方法,先执行父类的构造方法,然后再执行子类的构造方法。

六、如下代码的执行结果是什么(D

public class Test { 
     public int aMethod(){
         static int i = 0;
         i++; 
         return i;
     } 
    public static void main(String args[]){
         Test test = new Test(); 
         test.aMethod(); 
         int j = test.aMethod();
         System.out.println(j);
     } 
}

A. 0       B. 1       C. 2        D. 编译失败 


答案:D

静态的变量只能再类中,或者静态方法、或者静态代码块中定义,不能再非静态的方法或者代码块中定义,因为静态的变量属于类,而给静态的方法和代码块通过实例化对象,就会属于某个对象。

二、倒置字符串

 【解题思路】:这里我们将输入的字符串转换成字符数组,然后整体将字符数组中的元素逆置,然后再将每个单词进行逆置,这样就得到了一个逆置之后的字符串。

public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        char[] ch = str.toCharArray();
        int let = ch.length;
        //将整体的字符串进行逆置
        func(ch,0,let-1);

        int i = 0;
        while(i < let){
              int j = i;//i用来遍历数组中的单词
            //当j小于数组长度并且j指向的位置不是空格,则向前挪动一位。
            while(j < let && ch[j]!= ' '){
                j++;
            }
            //当j没有走到数组末尾之后,则对空格之前的单词进行逆置
            if(j < let){
                func(ch,i,j-1);
                i = j+1;
            }else{
                //如果j走到最后数组最后一个元素之后,则表示这个数组中每个单词已经逆置完了,将i和j放在同一个位置,用i作为循环结束条件。
                func(ch,i,j-1);
                i = j;
            }
        }
        String string = new String(ch);
        System.out.println(string);
    }
    public static void func(char[] array,int start,int end){
        while(end>start){
            char tmp = array[start];
            array[start] = array[end];
            array[end] = tmp;
            //两个指针移动到下一个需要交换的位置,进行下一组交换。
            start++;
            end--;
        }
    }
}

三、排序子序列

牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道它最少可以把这个数组分为几段排序子序列。

如阳历所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分2个排序子序列,所以输出2.

输入描述:输入的第一行为一个正整数n(1 ≤ n ≤ 10^5),第二行包括n个帧数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。

输出描述:输出一个整数表示牛牛可以将A最少划分为多少段排序子序列

示例

输入6

1 2 3 2 2 1

输出 2

 题目分析

递增排列:1,2,3,4,5;也就是a[ i ] < a[ i+1 ]

递减排列:9,8,7,6,5;也就是a[ i ] > a[ i+1 ]

非递减排列:1,2,2,3,3,5,6;也就是a[ i ] <= a[ i+1 ]

非递增序列:9,8,7,5,5,3,2;也就是a[ i ] >= a[ i+1 ]

  • 非递增和非递减排列整体还是呈现递减或者递增,但是中间存在相同的数。
  • 上述题目表示的意思为,你输入的一组数字,可以按照非递增或者非递减的方式分为几组。你输入的这组数字,可能存在连续几个数字是非递增,这几个数字之后,又存在一些数字是连续非递减的。

✨当我们定义一个变量i遍历你输入的这个数组,存在三种情况

  1. i遍历到的数字,比i+1位置的数字小,
  2. i遍历到的数字,比i+1位置的数字大,
  3. i遍历到的数字,与i+1位置的相等。

代码示例

public class Main{
    public static void main(String[] args) {
        Scanner scan =new Scanner(System.in);
        int n = scan.nextInt();//定义的输入元素的个数
        int[] arr = new int[n+1];//这里给数组定义的长度比输入的大1,是因为防止遍历数组进行比较的时候,出现数组越界。
        for (int i = 0; i < n; i++) {
            arr[i] = scan.nextInt();
        }
        int count = 0;//用来记录划分的子序列的个数
        int i = 0;//使用i遍历数组
        //这里使用循环,因为i没向前做一步,都需要判断是否到元素的末尾,并且判断是三种情况中的哪一个
        while(i < n){
            if(arr[i] < arr[i+1]){
                //i下标的值比i+1小
                while(i < n && arr[i] < arr[i+1]){
                  //有可能存在一些值连续情况下都是i下标的值比i+1的小,将这种情况的一组数据遍历完就需要使用一个变量记录一下,
                    //这就是数组划分的一个子序列。
                  i++;
                }
                count++;
                //这里使用i++,例如 123221,当i在3的位置时,没有满足if条件,所以3之前包括3,被划分为一个子序列,就需要i在向前走一位。
                i++;

            }else if(arr[i] == arr[i+1]){
                //i下标的值和i+1的值相等
                i++;
            }else{
                //i下标的值比i+1的值大
                while(i < n && arr[i] > arr[i+1]){
                    //也有可能出现一组连续的数字i位置的值比i+1位置的值大,这种情况的一组数据遍历完成之后,就需要记录一下。
                    //这就是 数组划分的有一个子序列
                    i++;
                }
                count++;
                i++;
            }
        }
        System.out.println(count);
    }
}

图解代码中对数组越界的处理

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/772743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目化思维

项目任务负责人的角色 整合者 管理者 影响者 明确需求和目标&#xff1a;IPAD四问法 I:Influencer关键影响人 P:Purpose目的 A:Acceptance 成功标准 时间&#xff0c;成本&#xff0c;质量 D:Deliverables 可交付物 MoSCoW原则 任务分解WBS&#xff08;work breakdown str…

【已解决】哪些软件可以解压RAR文件?

RAR文件是我们日常生活及工作中经常用的压缩文件&#xff0c;文件压缩后可以更方便储存或者传输&#xff0c;后续要使用的时候再进行解压。 那RAR文件如何解压呢&#xff1f;哪些软件可以用来解压RAR文件&#xff1f;在这一方面还是小白的小伙伴可以来看看下面的分享。 解压任…

06_本地方法接口+07_本地方法栈

一、本地方法&#xff1f; 本地方法就是Java调用非Java代码的接口。 本地方法的作用是融合不同的编程语言为Java所用&#xff0c;它的初衷是融合 C、C程序 二、为什么要使用Native Method? 三、本地方法栈 Java虚拟机栈用于管理Java方法的调用&#xff0c;而本地方法栈用于…

JVM系统优化实践(20):GC生产环境案例(三)

您好&#xff0c;这里是「码农镖局」CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e; 某新手开发工程师接到了一个保存Elasticsearch日志的任务&#xff0c;以供后续分析之用。但写代码的时候&#xff0c;误将保存日志的代码段弄成了无限循环&#xff0c;程序…

玩转单细胞(10):替换单细胞Seurat对象UMAP坐标

玩转单细胞往期精彩系列&#xff1a; 玩转单细胞(2):Seurat批量做图修饰 玩转单细胞(3):堆叠柱状图添加比例 玩转单细胞(4):单细胞相关性 玩转单细胞(5):单细胞UMAP图只标记特定细胞群、圈定细胞群及坐标轴修改 玩转单细胞(6):单细胞差异基因展示之对角散点图 玩转单细胞…

《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(5)-Charles如何设置捕获Https会话

1.简介 在大数据时代&#xff0c;互联网时代&#xff0c;个人信息安全尤为重要&#xff0c;网络安全在近日多起电信诈骗事情发酵下的情况下&#xff0c;引起国家&#xff0c;企业&#xff0c;个人对于互联网安全进一步的重视。而之前很多以http协议传输的网站出现的网站信息泄露…

APIKIT 自学日记:不光有测试报告,还可以保存测试方案呢

在 APIkit 中做测试&#xff0c;可以直接查看测试报告的&#xff01; 测试报告 进入测试报告页面&#xff0c;在这里会列出所有手动批量测试、定时测试、Open api测试的测试报告。 查看测试报告 点击顶部的标签&#xff0c;进入定时测试报告列表&#xff0c;你可以在这里选择…

【hadoop】HDFS

HDFS 操作HDFSWeb Console 网页工具操作NameNode操作SecondaryNameNode 命令行Java API HDFS的原理解析数据上传的过程数据下载的过程 HDFS的高级特性回收站配额Quota名称配额空间配额 快照Snapshot安全模式 SafeMode权限管理&#xff1a;类似LinuxHDFS的集群 HDFS的底层原理&a…

LangChain + Embedding + Chromdb,关联使用ChatGLM的本地搭建训练平台教程

一.介绍 OpenAI 在国内用户注册会遇到各种阻力&#xff0c;目前可行的方法是使用本地数据集的功能实现联网搜索并给出回答&#xff0c;提炼出TXT、WORD 文档里的内容。 现在主流的技术是基于强大的第三方开源库&#xff1a;LangChain 。 文档地址&#xff1a;&#x1f99c;…

行为型模式 - 责任链模式

概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门负责人、副总经理、总经理等&#xff0c;但每个领导能批准的天数不同&a…

2023出海增长背后的隐忧

2023出海增长背后的隐忧 2023.7.19版权声明&#xff1a;本文为博主chszs的原创文章 今年出口逆势增长的领域&#xff0c;新能源车、锂电池、太阳能电池&#xff0c;号称新三样&#xff0c;有数据支撑&#xff0c;看起来鼓舞人心。 见&#xff1a;外贸出口“新三样”&#xf…

Vue2计算属性如何传参

Vue2官网并没解释计算属性应该怎么传值&#xff0c;但是呢&#xff0c;通过闭包的方式(使用箭头表达式)实际上是可以给计算属性传参的&#xff08;当然&#xff0c;多个参数也是可行的&#xff09;。 以下是本人项目开发使用自己基于ElementUI封装的集信息采集与文件上传功能的…

软件基础问答题

性能&#xff1a; 负载压力测试是指在一定约束条件下测试系统所能承受的并发用户量、运行时间、数据量等&#xff0c;以确定系统所能承受的最大负载压力。 负载测试是通过逐步增加系统负载&#xff0c;测试系统性能的变化&#xff0c;并最终确定在满足性能指标的情况下&#xf…

如何控制项目管理的时间节点?

“这个任务着急&#xff0c;先把这个做出来”“临时加个任务”我们在项目开发中&#xff0c;经常遇到这些问题&#xff0c;往往造成项目范围增加、进度延迟、成本增加等问题&#xff0c;项目风险不断增加。 那么我们应该如何更高效地管理项目&#xff0c;尤其是针对关键时间节点…

Win10家庭版安装docker 以及解决 docker is starting

&#x1f468; 作者简介&#xff1a;大家好&#xff0c;我是Taro&#xff0c;前端领域创作者 ✒️ 个人主页&#xff1a;唐璜Taro &#x1f680; 支持我&#xff1a;点赞&#x1f44d;&#x1f4dd; 评论 ⭐️收藏 文章目录 前言一、Hype-v是什么&#xff1f;二、使用步骤1.do…

自动登录harbor脚本

在CI/CD自动化流程中&#xff0c;或者执行shell脚本拉取本地镜像时&#xff0c;需要手工docker login本地仓库&#xff0c;十分的不方便&#xff0c;这里提供一个可以执行的sh脚本&#xff0c;自动登录本地的镜像仓库。 1、安装expect yum -y install expect 2、创建sh文件 vi…

基于XPopup实现的弹窗效果

基于XPopup实现的弹窗效果&#xff1a; implementation com.github.li-xiaojun:XPopup:2.9.191、底部弹窗(BottomPopupView) class OutlinkDealDialog(context: Context,private val selectClickCallback: ((index: Int) -> Unit)? null, ) : BottomPopupView(context) {…

Mybatis简介

1.1 框架介绍 框架是一款半成品软件&#xff0c;可以基于这个半成品软件继续开发&#xff0c;来完成我们个性化的需求&#xff01; 如图: 1.2 框架要解决的问题 框架要解决最重要的是技术整合的问题 不同的软件企业需要从 J2EE 中选择不同的技术&#xff0c;使得软件企业最…

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(备份+恢复篇)

深入探索和分析MySQL数据库的数据备份和恢复实战开发指南 MySQL数据库备份全量备份全量备份应用场景 增量备份binlogbinlog主要作用binlog的作用主要有两个方面 开启binlog日志功能要开启MySQL的binlog日志步骤 mysqlbinlogmysqlbinlog的使用案例 全量备份与增量备份结合按天全…

TKDE论文,跑的改的,GPSCVULDETECTOR

Combining Graph Neural Networks With Expert Knowledge for Smart Contract Vulnerability Detection 论文代码GitHub https://github.com/Messi-Q/GPSCVulDetectorpaper https://ieeexplore.ieee.org/abstract/document/9477066/参考IJCAI 21中AME的数据集 https://gith…