吾日三省吾身---对平常遇到的错误总结

news2025/1/4 19:36:43

✨个人主页: 不漫游-CSDN博客

前言

本篇文章是对平常练习遇到的问题总结,多吸取经验教训才能避免未来再犯~

Java语法部分 

(一)多态

思考:这道题很明显考察的是多态的知识点,即一个对象可以被赋值给其父类的引用,这样可以通过父类的引用调用子类的方法。

读题就可以知道B是A的子类,C是B的子类,但同样也还是A的子类,记住这点答案就显而易见了,选的是D~

(二)继承

思考:这道题是关于继承的知识,在类 Alpha 中,继承了类 Base,在 main 方法中,由于 Alpha 是 Base 的子类,因此在创建 Alpha 对象时,会隐含super关键字

首先创建一个 Alpha 对象 ​new Alpha()​,此时会先执行 Base 类的构造方法,输出"Base",然后执行 Alpha 类的构造方法,但没有输出内容。
接着创建一个 Base 对象 ​new Base()​,此时只会执行 Base 类的构造方法,输出"Base"。

 所以最后结果就是输出BaseBase。

 (三)字符串的特性

思考: 这道题很容易出错,首先分析代码

1. 首先创建 Example 对象 ex,并初始化了字符串 str 和字符数组 ch。

2. 在 change 方法内部将 str 修改为"test ok",但是这种修改只作用于方法内部,并不会影响到原始对象 ex.str 的值,因为Java中字符串属于不可变对象,所以修改后会在 change 方法结束后被丢弃。


3. 另一方面,修改了字符数组 ch 的第一个元素为 'g',这种修改会影响到原始对象 ex.ch 的内容,因为字符数组是可变对象。所以最终输出是 "good and gbc"。

编程题 

(一)字符集合

字符集合_牛客题霸_牛客网输入一个字符串,求出该字符串包含的字符集合,按照字母输入的顺序输出。 数据范。题目来自【牛客题霸】icon-default.png?t=N7T8https://www.nowcoder.com/practice/784efd40ed8e465a84821c8f3970b7b5?tpId=182&tqId=34772&ru=/exam/oj

思考:这道题仔细看题不难发现就是要去重即可,既如此,那便可以记录字母出现的次数,如果出现次数是0次,那就是新字母,那就存起来。

可是这道题很容易忽略字符串String的特性-->不可修改性

因此这里就要创建一个可变字符串类型对象才可以实现,画图理解就更好

代码实现就是这样了: 因为要区分大小写,所以创建的是128长的字符数组,最大的ASCII 值

import java.util.Scanner;

public class Main {
    public static String func(String s) {
        int ret = 0;
        // 创建一个长度为128的字符数组,用于记录每个字符是否出现过
        char[] arr = new char[128];
        // 创建一个可变字符串对象,用于存储处理后的字符
        StringBuilder str = new StringBuilder();
       
        for (int i = 0; i < s.length(); i++) {
            // 如果字符在数组中对应位置值为0,表示该字符尚未出现过
            if (arr[s.charAt(i)] == 0) {
                str.append(s.charAt(i));//追加字符
                // 将字符在数组中对应位置标记为已出现
                arr[s.charAt(i)]++;
            }
        }
        
        // 将可变字符串转换为不可变字符串并返回
        return str.toString();
    }
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            System.out.println(func(in.nextLine()));
        }
    }
}

(二)合并两个有序数组

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/merge-sorted-array/description/

思考:这道题要思考怎么合并,合并后怎么排序。当然这是直观思路,

但仔细观察,num1和num2本身就是有序的,并且num1的数组长度是m+n,

这样一来,可以利用两个指针分别指向两个数组的末尾,然后从后向前遍历两个数组,比较它们的元素大小,并将较大的元素放入合并后的数组的末尾。 

搭配动图就更好理解了~ 

代码实现便是下面: 

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p1 = m - 1; //指向nums1数组的末尾
        int p2 = n - 1; //指向nums2数组的末尾
        int p = m + n - 1; //指向合并后数组的末尾
        
        // 从后向前遍历两个数组,将较大的元素放入合并后数组的末尾
        while (p2 >= 0) {
            //如果nums1数组的元素较大,将其放入合并后数组的末尾
            if (p1 >= 0 && nums1[p1] > nums2[p2]) {
                nums1[p] = nums1[p1];
                p1--;
            } else {
                //num2数组同理
                nums1[p] = nums2[p2];
                p2--;
            }
            p--; //更新合并后数组的指针位置
        }
    }
}

数据结构部分

(一)链表

思考:选C

这道题没有考虑周到,一般情况下,在不带头结点的单链表存储队列中,进行出队操作时,要移除队头元素,因此需要修改队头指针。

但如果移除后队列为空,则需要同时修改队尾指针为空。因此,在进行出队操作时,队头队尾指针都可能需要被修改。

(二)堆排序

 

思考:要注意是 排升序要建大堆,排降序建小堆,别记混了~选C

(三)子序列问题

判断子序列_牛客题霸_牛客网给定两个字符串 S 和 T ,判断 S 是否是 T 的子序列。 即是否可以从 T 删。题目来自【牛客题霸】icon-default.png?t=N7T8https://www.nowcoder.com/practice/39be6c2d0a9b4c30a7b04053d5960a84?tpId=117&tqId=39453&ru=/exam/oj

思考:这道题是匹配类型的问题,用栈是比较适合的,可以先将字符串S入栈,在遍历T的过程中与栈顶元素比较,如果相同则出栈,最后倘若栈空,则就是子序列了

import java.util.*;

public class Solution {
    /**
     *
     * S字符先后顺序和T中一致
     *
     * @param S string字符串
     * @param T string字符串
     * @return bool布尔型
     */
    public boolean isSubsequence (String S, String T) {
        if (S.equals(T)) {
            return true;
        }
        Stack<Character> stack = new Stack<>();
        for (int i = S.length() - 1; i >= 0; i--) {
            stack.push(S.charAt(i));
        }
        for (int i = 0; i < T.length(); i++) {
            if (stack.isEmpty()) {
                return true; //如果栈为空,说明S已经全部匹配完成,即S是T的子序列
            }
            if (stack.peek() == T.charAt(i)) {
                stack.pop();
            }
        }
        return stack.isEmpty(); //判断最后栈是否为空,如果为空则S是T的子序列,否则不是
    }
}

(四)点击消除问题

点击消除_牛客题霸_牛客网牛牛拿到了一个字符串。 他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串icon-default.png?t=N7T8https://www.nowcoder.com/practice/8d3643ec29654cf8908b5cf3a0479fd5?tpId=308&tqId=40462&ru=/exam/oj

思考:这道题用栈去写会比较适合,思路和判断子序列大差不差,但要注意

最后输出的是正序,但用栈最后输出的是逆序,所以在遍历字符串的时候可以从后遍历更加方便

画图理解

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) { 
            String s = in.next(); //获取输入的字符串
            Stack<Character> stack = new Stack<>(); 

            // 遍历输入的字符串
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i); //获取当前字符
                if (stack.isEmpty()) { 
                    stack.push(c); //入栈
                } else if (stack.peek() == c) { //如果当前字符与栈顶字符相同
                    stack.pop(); //移除栈顶字符
                } else { 
                    stack.push(c);
                }
            }

            if (stack.isEmpty()) { //如果栈为空
                System.out.print(0); //输出0,表示所有字符都成对出现
            } else {
                // 遍历栈中剩余的字符并输出
                for (int i = 0; i < stack.size(); i++) {
                    System.out.print(stack.get(i));
                }
            }
        }
    }
}

其实这些题目难度不算很大,但错了就是错了,还是要多总结,多复习才是,尤其是字符串相关的知识在OJ题中相当常见,所以还是要熟练掌握才行~

看到最后,如果觉得文章写得还不错,希望可以给我点个小小的赞,您的支持是我更新的最大动力

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

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

相关文章

基于SpringBoot+Vue校园二手交易系统的设计与实现

系统介绍 自从新冠疫情爆发以来&#xff0c;各个线下实体越来越难做&#xff0c;线下购物的人也越来越少&#xff0c;随之带来的是一些不必要的浪费&#xff0c;尤其是即将毕业的大学生&#xff0c;各种用品不方便携带走导致被遗弃&#xff0c;造成大量的浪费。本系统目的就是让…

【NR RedCap】Release 18标准中对5G RedCap的增强

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G技术研究。 博客内容主要围绕…

PotatoPie 4.0 实验教程(28) —— FPGA实现sobel算子对摄像头图像进行边缘提取

什么是sobel算子&#xff1f; Sobel 算子是一种常用的边缘检测算子&#xff0c;用于在图像中检测边缘。它基于对图像进行梯度运算&#xff0c;可以帮助识别图像中灰度值变化较大的区域&#xff0c;从而找到图像中的边缘。 Sobel 算子通过计算图像的水平和垂直方向的一阶导数来…

[蓝桥杯2024]-Reverse:rc4解析(对称密码rc4)

无壳 查看ida 这里应该运行就可以得flag&#xff0c;但是这个程序不能直接点击运行 按照伪代码写exp 完整exp&#xff1a; keylist(gamelab) content[0xB6,0x42,0xB7,0xFC,0xF0,0xA2,0x5E,0xA9,0x3D,0x29,0x36,0x1F,0x54,0x29,0x72,0xA8, 0x63,0x32,0xF2,0x44,0x8B,0x85,0x…

【yolov8yolov5驾驶员抽烟-打电话-喝水-吃东西检测】

YOLO算法DMS驾驶员抽烟-打电话-喝水-吃东西检测数据集 YOLOv8和YOLOv5是深度学习中用于目标检测的先进算法&#xff0c;它们在实时性和准确性方面表现出色&#xff0c;适用于各种视频监控和图像处理应用&#xff0c;包括驾驶员行为监测。这些算法通过单次前向传播即可预测图像…

【FPGA】优化设计指南(一):设计原则

目录 避免采用不可综合的语句设计时采用同步的时钟组合逻辑与毛刺异步复位与同步复位动态分析与静态分析功能流水线时序违例乒乓操作面积和速度的平衡避免采用不可综合的语句 1.#1000延时语句 2.除法运算/,除非除数为2的整次幂 3.实数类型不可综合(real) 4.综上,使用可综合…

C++初阶之vector的使用和模拟实现

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.成员变量 二.默认构造 三.size和capacity函数 3.1库中的…

Qt的qtmqtt库连接onenet出现QMQTT::SocketRemoteHostClosedError解决方法

问题描述 在Qt发开过程中使用qtmqtt库来连接onenet的mqtt服务器&#xff0c;在ClientId、Username和Password均填写正确的情况下还是连接不上&#xff0c;查看错误显示QMQTT::SocketRemoteHostClosedError。 解决方法 client中的CleanSession标志位必须设置为true。 client …

ssh爆破模拟攻击(最基础)

攻击机&#xff08;192.168.83.136&#xff09; 靶机&#xff08;192.168.83.140&#xff09; 靶机打开22端口服务 centos7开启ssh 22端口_centos7开放22端口-CSDN博客 看这个师傅的操作 此实验对ssh端口漏洞利用的最基础实验 1、信息收集 发现22端口打开&#xff0c;尝…

k8s RBAC 角色访问控制详解与生产中的实际应用案例

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、k8s简介 2、RBAC简介 二、RBAC关键…

Python_AI库 Pandas的数据结构及基本操作

Python_AI库 Pandas的数据结构及基本操作 本文默认读者具备以下技能&#xff1a; 熟悉python基础知识&#xff0c;vscode或其它编辑工具 熟悉表格文件的基本操作 具备自主扩展学习能力 本文篇幅较长&#xff0c;但比较重要&#xff0c;希望读者可以认真看完并实例运行。 Pa…

python在pyqt5+logging+threading模块实时显示日志

pyqt5logging模块&#xff0c;在界面上实时显示日志 简介代码实现logging.Handler重写界面创建与日志实时打印执行main.py 简介 在写小工具时&#xff0c;使用pyqt5生成界面&#xff0c;在代码中使用logging模块来打印信息&#xff0c;现在希望能将logging打印的信息实时展示在…

Android 开发工具使用

c调试 在NDK调试的时候&#xff0c;如果找不到 符号的话&#xff0c;我们可以在调试配置中添加符号地址的全路径一直到根目录&#xff1a;&#xff0c;xxx/armeabi-v7a&#xff1a; You must point the symbol search paths at the obj/local/ directory. This is also not a …

每日OJ题_DFS回溯剪枝⑦_力扣77. 组合

目录 力扣77. 组合 解析代码 力扣77. 组合 77. 组合 难度 中等 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,…

路透社:美国SEC将拒绝以太坊ETF

4月25日&#xff0c;据路透社报道&#xff0c;美国SEC在下个月将拒绝以太坊现货ETF申请。根据4位知情人士表示&#xff0c;在最近几周与美国证券交易委员会&#xff08;SEC&#xff09;进行了会议之后&#xff0c;美国发行商和其他公司预计SEC将拒绝他们推出与以太坊价格挂钩的…

windows pytorch安装

安装环境 WindowsAnacondaCudacuDNN Linux和Windows操作系统的安装存在差异&#xff0c;步骤会有所不同&#xff0c;本教程主要针对Windows系统进行示例。 Anaconda集成了许多方便的包和工具&#xff0c;使用会更加方便&#xff0c;特别适合科学计算&#xff0c;深度学习的数…

基于MATLAB野外观测站生态气象数据处理分析

朱老师(副教授)&#xff1a;来自国内重点高校&#xff0c;长期从事野外观测站生态气象监测与评估研究&#xff0c;发表SCl论文多篇&#xff0c;主持国家与地方科研项目多个,在生态环境数据处理与分析中具有丰富的实践项目经验。 以野外观测站高频时序生态气象数据为例&#xff…

ssm项目后端如何导出war及前端如何导出静态资源

后端如何导出war包 后端工具&#xff1a;IDEA 2020.1.3 运行我们编写工具maven里面的package 运行成功的日志 我们运行完&#xff0c;会生成一个target文件夹&#xff0c;在这个文件夹里面找到war包即可 前端如何导出静态资源 使用工具&#xff1a;WebStorm 2020.1.3 打开左…

c++的学习之路:28、哈希表

摘要 本章主要是说一下哈希的实现 目录 摘要 一、哈希表 1、哈希概念 2、闭散列 1、节点创建 2、插入 3、查找 4、删除 5、测试 3、开散列 1、创建 2、插入 3、查找 4、删除 5、析构函数 二、map 三、set 四、位图与布隆过滤器 五、代码 test.cpp HashT…

[移动端] “viewport“ content=“width=device-width, initial-scale=1.0“ 什么意思

布局视口, 代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>Document</title><style>body,html {margin: 0;padding: 0;}.box {width: 200px;height: 200px;background-color: pi…