笔试狂刷系列--Day1

大家好,我是LvZi,今天开启新的章节笔试狂刷系列
在这里插入图片描述

一.两个数组的交集

1. 题⽬链接: 两个数组的交集

思路分析:
查找两个数组的公共元素,一开始可能想到使用Set,先遍历第一个数组,存储nums1中所有的元素,接着遍历nums2中的所有元素,判断是否在Set之中,但是发现在遍历第二个数组时可能会出现重复的元素,因此需要标记出现过的元素

使用哈希表存储数字以及标记情况,在遍历nums1时,每遍历到一个数字就将其存储进哈希表之中,同时将其标记为true,接着遍历第二个数组,如果hash中不存在直接跳过;如果存在,证明是公共元素将其存储进ret中,接着将其标记为false,防止存储重复元素

代码实现:
1.纯哈希表

    public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
        // write code here
        HashMap<Integer,Boolean> hash = new HashMap<>();
        
        // 遍历第一个数组
        for(int x : nums1) {
            hash.put(x,true);
        }

        // 遍历第二个数组
        ArrayList<Integer> ret = new ArrayList<>();
        for(int y : nums2) {
            if(hash.getOrDefault(y,false)) {
                ret.add(y);
                hash.put(y,false);
            }
        }

        return ret;
    }

2.使用数组模拟哈希表
哈希表起到的作用就是存储数字,并将出现过的数字进行标记

    public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
        // write code here
        boolean[] hash = new boolean[1010];// 使用数组模拟哈希表
        for(int x : nums1) hash[x] = true;

        ArrayList<Integer> ret = new ArrayList<>();
        for(int y : nums2) {
            if(hash[y]) {
                ret.add(y);
                hash[y] = false;
            }
        }
        return ret;
    }

二.点击消除(栈)

1.题目链接:点击消除
2.题目分析:
在删除一个字母之后还需要考虑是否和之前的字符是否相同,整个模拟的过程十分类似于括号匹配,本题可以使用来解决(关于括号匹配可以看这篇文章括号匹配)

代码实现:
1.使用栈

import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        char[] s = str.toCharArray();
        int n = s.length;
        Stack<Character> st = new Stack<>();
        st.push(s[0]);

        for(int i = 1; i < n; i++) {
            // 入栈
            if( st.size() == 0 || s[i] != st.peek()) {// 和栈顶元素不相等  直接入栈
                st.push(s[i]);
            }else {// 和栈顶元素相同直接出栈
                st.pop();
            }
        }

        StringBuffer sb = new StringBuffer();
        for(Character ch : st) sb.append(ch);
        if(sb.length() == 0) System.out.print(0);
        else System.out.print(sb.toString());
    }
}

2.使用可变数组模拟栈
在本题的作用其实就是一个完成尾插尾删的集合类,在Java中我们可以使用StringBuffer 来模拟栈

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        char[] s = str.toCharArray();
        int n = s.length;
        StringBuffer sb = new StringBuffer();

        for(int i = 0; i < n; i++) {
            if(sb.length() == 0 || s[i] != sb.charAt(sb.length() - 1)) sb.append(s[i]);
            else sb.deleteCharAt(sb.length() - 1);
        }

        System.out.println(sb.length() == 0 ? 0 : sb.toString());
    }

改写括号匹配:
括号匹配和这题非常类似,在括号匹配中,如果是左括号就入栈,如果是右括号,就要判断是否和栈顶元素匹配(对应着道题目就是看两个字母是否相同),如果匹配,删除栈顶元素,如果不匹配直接返回false
在这里插入图片描述
代码实现:

class Solution {
    // 使用可变数组模拟
    public boolean isValid(String ss) {
        char[] s = ss.toCharArray();
        if(s.length % 2 != 0) return false;// 为奇数  一定不匹配
        StringBuffer sb = new StringBuffer();

        for(int i = 0; i < s.length; i++) {// 遍历字符串
            char ch = s[i];
            if(ch == '(' || ch == '[' || ch == '{') sb.append(ch);// 左括号入栈
            else {// 右括号判断是否匹配
                if(sb.length() == 0) return false;// 防止第一个字符就是右括号
                else {
                    char top = sb.charAt(sb.length() - 1);
                    if(top == '(' && ch == ')' || top == '[' && ch == ']' || top == '{' && ch == '}'){
                        sb.deleteCharAt(sb.length() - 1);// 匹配  删除栈顶元素
                    } else {
                        return false;// 不匹配直接返回false;
                    }
                }
            }
        }

        return sb.length() == 0;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

神经网络中的神经元和激活函数介绍

文章目录 1、什么是人工神经网络 2、什么是神经元 3、什么是激活函数 线性激活函数 Sigmoid激活函数 双曲正切激活函数 修正线性单元&#xff08;ReLU&#xff09;激活函数 Leaky ReLU激活函数 Softmax激活函数 1、什么是人工神经网络 神经网络能够利用多层神经元学习复杂的模…

使用docker打包当前服务器的neo4j环境

Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖打包到一个可移植的容器中,这样应用程序就可以在任何支持Docker的平台上运行,而无需担心环境差异。 当运行一个Docker容器时,它会加载一个镜像并运行它。Docker在容器内部创建一个隔离的环境,这个环境被称…

Redis学习-Redis的九种数据结构

String &#xff08;字符串&#xff09; 虽然redis是用C语言编写&#xff0c;但是redis中的string是redis自己实现的字符串结构&#xff0c;叫Simple Dynamic String简称&#xff08;SDS&#xff09;&#xff0c;因为redis做为中间件会接受不同语言编写的程序传过来的字符串&a…

Oracle Hint 语法详解

什么是Hint Hint 是 Oracle 提供的一种 SQL 语法&#xff0c;它允许用户在 SQL 语句中插入相关的语法&#xff0c;从而影响 SQL 的执行方式。 因为 Hint 的特殊作用&#xff0c;所以对于开发人员不应该在代码中使用它&#xff0c;Hint 更像是 Oracle 提供给 DBA 用来分析诊断问…

Python中pyside2出现的pyside2 qt platform plugin could be in错误及其解决方法

系统平台&#xff1a;Win10 64bit python版本&#xff1a; python 3.8 使用pip install pyside2安装 pyside2 这是找不到QT平台的插件&#xff0c;这是环境变量QT_QPA_PLATFORM_PLUGIN_PATH出现错误 具体解决方法&#xff1a; 我们可以在每一段程序开始之前设定环境变量&…

pytorch与深度学习

ChatGPT PyTorch是一个由Facebook AI Research Team开发的开源深度学习库&#xff0c;它提供了一个灵活的环境和丰富的API&#xff0c;用于快速且方便地构建、训练和部署深度学习模型。PyTorch在科学界和工业界都收到了广泛的使用&#xff0c;其中包括了学术研究、小型项目和大…

第50篇:算法的硬件实现<一>

Q&#xff1a;本期我们来开始介绍如何使用算法状态机&#xff08;ASM&#xff09;图在硬件开发板上实现算法。 A&#xff1a;算法状态机 (Algorithmic State Machine&#xff0c;ASM) 图是描述数字系统控制单元的工作流程图&#xff0c;主要用来描述控制单元的时序操作特性&am…

功能测试用例设计思路

我们为什么要写好一份测试用例呢&#xff1f;测试同学应该都知道测试用例的重要性&#xff0c;测试用例就是我们测试的依据&#xff0c;也是测试过程中不能缺少的测试文档。 一、用例编写规范目的&#xff1a; 1、提高测试用例的可读性&#xff0c;可执行性、合理性。 2、测试…

Spring(下)

接上篇&#xff0c;从第八个问题讲起 八.Spring工厂创建复杂对象 1.什么是复杂对象 简单对象就是可以直接new出来的&#xff0c;也就是直接调用构造方法创建 所以复杂对象就是不能直接通过调用构造方法创建。就比如JDBC中的Connection 2.三种方法 &#xff08;1&#xff…

4月阿里offer被毁,我该怎么进字节?

在校招求职的浪潮中&#xff0c;有些故事总是让人唏嘘不已。比如最近在社交平台上广泛讨论的一个话题&#xff1a;“4月阿里offer被毁&#xff0c;我该怎么进字节&#xff1f;”这不仅反映了当下职场的变动性&#xff0c;也映射了求职者在面对突如其来的变故时的无助与挣扎。 …

基于springboot实现精准扶贫管理系统项目【项目源码+论文说明】计算机毕业设计

基于SpringBoot实现精准扶贫管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了精准扶贫管理系统的开发全过程。通过分析精准扶贫管理系统管理的不足&#xff0c;创建了一个计算机管理精准扶贫管理系…

docker-003镜像制作

步骤 使用docker commit提交容器使之成为镜像以ubuntu安装vim后的容器为例 1 ubuntu安装vim 启动容器 docker run -it --nameubuntu-vim ubuntu /bin/bash安装vim apt-get update apt-get install vim2 提交容器作为镜像 查看容器 docker ps -a提交容器作为镜像 命令格式&…

随机森林计算指标重要性—从决策树到随机森林Python实现

文章目录 前言一、节点二、决策树2.1 案例分析——优良的水稻2.2 案例分析——家庭财富水平 三、随机森林三、Python代码实现3.1 关键问题3.1.1 节点的表示3.1.2 决策树的表示** 根节点划分左右子树的依据 **3.1.3 随机森林的构造与重要性的表示 3.2 节点类3.2 决策树类3.2.1 初…

阿里云OSS对象存储的使用和快速入门

一、介绍 云存储是一种通过互联网连接的服务&#xff0c;允许用户将数据存储在远程的云服务器上&#xff0c;而不是存储在本地设备上。这些数据可以包括文件、数据库、备份等各种类型的信息。云存储服务提供商通常会管理和维护这些存储设施&#xff0c;并提供用户可以访问、管…

c语言中的数组

数组 数组是一种构造类型&#xff0c;是由基本类型构造而成。当我们想用一群变量来描述同一类相同的东西时候&#xff0c;比如100个年龄变量&#xff0c;我们可以这样int age1&#xff1b;int age2&#xff1b;int age3&#xff1b;……int age 100;这样即不方便书写&#xff…

【公司UI自动化学习】

公司课程链接&#xff1a;https://l.jd.com/student/project/project.du?project_id697509403 公司的课程&#xff0c;是给一个学习方向。 一、 PC自动化 1&#xff09;什么项目适合 2&#xff09;PC自动化介入时间点 3&#xff09;自动化率&#xff1a; 频繁改动的&…

自动化测试Selenium(3)

目录 WebDriver相关API 打印信息 打印title 打印url 浏览器的操作 浏览器最大化 设置浏览器的宽,高 操作浏览器的前进, 后退, 刷新 控制浏览器滚动条 键盘事件 键盘单键用法 键盘组合按键用法 鼠标事件 WebDriver相关API 打印信息 打印title 即打印该网址的标题.…

SAP 销售业务中免费货物的会计核算

此博文主要介绍SAP销售业务中免费货物解决方案中&#xff0c;免费货物的会计核算。如果需要进一步了解SAP SD 销售与分销业务中&#xff0c;免费货物的标准解决方案概览&#xff0c;可先了解本博客博文&#xff1a;SAP销售与分销中的免费货物解决方案相关文章&#xff1a; htt…

负采样重要吗?它的理论与应用综述

Does Negative Sampling Matter? A Review with Insights into its Theory and Applications 负采样重要吗&#xff1f;它的理论与应用综述 Does Negative Sampling Matter? A Review with Insights into its Theory and Applications Zhen Yang, Ming Ding, Tinglin Huang,…

一文掌握运维绩效考核指标及实例参考

运维绩效考核需要综合考虑公司的战略和目标,确保考核公正和合理,同时还需要建立合适的管理和收集系统,根据绩效结果进行反馈和奖惩,并落实改进措施。 运维团队合理的绩效考核非常重要,以激励团队成员不断提高,同时确保团队目标的实现。针对运维团队的绩效评估,我们通常…