牛客算法题解:数字统计、两个数组的交集、点击消除

news2025/2/23 1:21:57


目录

BC153 [NOIP2010]数字统计

▐ 题解

NC313 两个数组的交集

▐ 题解

AB5 点击消除

▐ 题解


BC153 [NOIP2010]数字统计

题目描述

题目链接: [NOIP2010]数字统计_牛客题霸_牛客网 (nowcoder.com)

▐ 题解

题目要求统计出某段数组中一共有多少个2,所以本质上就是将这段数据遍历一遍,对于每个数进行拆分,将每个数字的每一个位分别拿出来统计一下,如果有2,就用一个计数器保存累加结果。

import java.util.Scanner;

public class Main {
    public static void main(String[] arg) {
        Scanner in = new Scanner(System.in);
        int l = in.nextInt();
        int r = in.nextInt();
        int count = 0;
        for(int i = l; i <= r; i++) {//遍历每一个数
            int temp = i;//拿出这个数
            while( temp != 0) {//对数字进行拆分操作
                if( temp % 10 == 2) {
                    count++;
                }
                temp = temp / 10;//拆去原数字的个位,使剩下的位数继续进入while循环判断
            }
        }
        System.out.println(count);
    }
}

NC313 两个数组的交集

题目描述

题目链接:两个数组的交集_牛客题霸_牛客网

▐ 题解

对于求俩个数组的公共元素,可以通过哈希的思想,首先对其中一个数组进行哈希标记,再遍历另外一个数组的每一个元素,将其拿出来与先前标记的元素做对比,如果该数字在另外一个数组中存在哈希标记就说明他们是公共元素。

至于哈希的部分,由于我们的数据量较小,所以就不需要构建哈希容器,即不需要构建HashMap这样的集合容器,我们可以自定义一个布尔类型数组(hash[1024]),将其大小设置为1024,由于1024>1000,因此该数组不会溢出,对于数组1中的元素我们都在这个布尔数组中设置对应位置的布尔值,true代表数组1存在这样的元素,false代表不存在。

举个例子来说:对于数组1中的元素 ,我们就将布尔数组中下标为3的元素(hash[3])标记为 true,以此类推,当数组1遍历完了后,布尔数组中为 true 的位置的元素都是在数组1中存在的,为false的就是数组1中不存在的。

当我们遍历第二个数组的时候,只需要将元素拿出来与该值对应的布尔数组的下标所在元素进行对比,就比如我们拿出第二个数组的元素 3 后,我们只需要对比布尔数组中下标为 3 的元素(hash[3])就知道了 3 这个数字是否在数组1存在,由于我们之前将(hash[3])置为了true,因此我们就判断出数字 3 是俩个数组的共同元素。

import java.util.*;

public class Solution {
    public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
        ArrayList<Integer> ret = new ArrayList<>();
        boolean[] hash = new boolean[1024];
        for(int x : nums1) {
            hash[x] = true;
        }
        for(int x : nums2) {
            if(hash[x] == true) {
                ret.add(x);
                hash[x] = false;
            }
        }
        return ret;
    }
}

AB5 点击消除

题目描述

题目链接: 点击消除_牛客题霸_牛客网

▐ 题解

该题目是非常符合栈这样的数据结构的思想的,相邻的元素就进行消除,我们可以将该字符串转化成一个字符数组,将这个字符数组放进栈里面,每一次进栈一个字符,进栈的时候判断当前元素和栈顶元素是否相同,如果相同就要执行消除操作,即弹出栈顶元素并且当前元素也不入栈;如果不相同就让当前元素进栈,如此反复,当数组元素全部放进栈之后我们就相对于得到了一个消除后的数组。政治

确定了使用栈这样的数据结构后,需要思考需要构建集合容器正真的实现一个栈吗?其实是没必要的,我们是对字符串进行操作,使用StringBuilder更加方便进行字符串的删除和拼接操作,因此我们可以用StringBuilder来模拟实现一个栈,通过字符串拼接append()的方法来达到入栈的目的,通过deleteCharAt()删除字符来完成出栈的目的。故而代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        char[] str = in.next().toCharArray();
        StringBuilder stack = new StringBuilder();//使用StringBuilder模拟实现一个栈,出栈相对于删除相同元素

        for(char x : str) {//遍历整个字符数组
            int len = stack.length();
            if(len == 0 || stack.charAt(len-1) != x) {//当栈为空、栈顶元素和当前元素不同则入栈
                stack.append(x);
            }else {//出栈,即消除相同元素
                stack.deleteCharAt(len-1);
            }
        }

        if(stack.length() == 0) {
            stack.append("0");//当所有元素都消除后,需要输出0
        }
        System.out.println(stack);
    }
}



 本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

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

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

相关文章

YOLOv8不同位置引入RepVGG重参数化

一、原理解析&#xff1a; 复杂的卷积网络大都具有如下缺点&#xff1a; 复杂的多分支设计&#xff08;如ResNet中的残差相加和Inception中的分支连接&#xff09;使模型难以实现和自定义&#xff0c;降低了推理速度和降低了内存利用率。一些组件&#xff08;例如Xception和Mo…

嵌入式linux系统中压力测试的方法

在Linux环境下,确保系统各项资源充分且稳定地运行对任何系统管理员来说都至关重要。特别是在生产环境中,理解如何对系统资源进行基准测试和压力测试可以帮助预防未来的问题,同时也能够优化现有系统的性能。 在本文中,我们将探讨如何使用命令行工具来对Linux系统的CPU、内存…

开发环境搭建——Node.js

在启动前端项目的时候我们通常会用到Node.js&#xff0c;下面是对Node.js的下载安装以及配置的讲解 一、Node.js的安装 1.1、通过Node.js官网下载&#xff1a;Node.js — Run JavaScript Everywhere 下载后双击.msi安装文件后一直点击下一步即可 1.2、配置node 1.2.1、查看…

MT2140 供水管线(最小生成树Kruskal)

思路&#xff1a;Kruskal模板题 代码&#xff1a; #include<iostream> #include<stdio.h> #include<string.h> #include<vector> #include<algorithm> using namespace std;#define LL long long intconst int MAXN1e22;struct edge{int u,v,w;…

try-catch-finally 捕获异常不在catch里抛出;循环遍历对象生成任务,捕获异常对象不抛出,不影响其他正常对象生成任务

场景&#xff1a;一个模板绑定多个对象&#xff0c;要对每个对象生成任务。捕获生成任务过程中的异常&#xff0c;但是不抛出&#xff0c;只是用日志记录。这样做目的&#xff1a;循环遍历对象生成任务时&#xff0c;异常对象数据生成任务时发生异常只是导致自己生成任务失败&a…

29 列表元素访问

创建列表之后&#xff0c;可以使用整数作为下标来访问其中的元素&#xff1b;列表还支持使用负整数作为下标。 x list(hello world) print(x) print(x[0]) # 下标为0的元素&#xff0c;第一个元素 print(x[-1]) # 下标为-1的元素&#xff0c;最后一个元素x[5] print(x)

RedHat9 | Ansible 角色

环境版本说明 RedHat9 [Red Hat Enterprise Linux release 9.0]Ansible [core 2.13.3]Python [3.9.10]jinja [3.1.2] 描述角色结构 Playbook可能比较冗长且负载&#xff0c;也可能存在大量的重复代码。而角色&#xff08;roles&#xff09;可以用于层次性结构化的组织playbo…

【python】python生活管理费系统(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Python爬虫入门01:在Chrome浏览器轻松抓包

文章目录 爬虫基本概念爬虫定义爬虫工作原理爬虫流程爬虫类型爬虫面临的挑战 使用Chrome浏览器抓包查看网页HTML代码查看HTTP请求请求头&#xff08;Request Header&#xff09;服务器响应抓包的意义 爬虫基本概念 爬虫定义 爬虫&#xff08;Web Crawler 或 Spider&#xff0…

【JavaEE初阶】线程安全(重点)

目录 &#x1f4d5; 线程安全的概念 &#x1f384; 观察线程不安全 &#x1f333; 线程不安全的原因 &#x1f6a9; 原因&#xff1a; &#x1f332;解决之前的线程不安全问题 &#x1f6a9; synchronized 关键字 &#x1f4d5; 线程安全的概念 如果多线程环境下…

前端面经1

1、js是单线程还是多线程&#xff1f; 单线程执行。一次只能执行一个任务&#xff0c;处理任务的方式是通过一个任务队列&#xff08;也称为消息队列&#xff09;来实现的。如果某个操作&#xff08;如网络请求或定时器&#xff09;需要花费较长时间才能完成&#xff0c;它不会…

Flink SQL 的工作机制

前言 Flink SQL 引擎的工作流总结如图所示。 从图中可以看出&#xff0c;一段查询 SQL / 使用TableAPI 编写的程序&#xff08;以下简称 TableAPI 代码&#xff09;从输入到编译为可执行的 JobGraph 主要经历如下几个阶段&#xff1a; 将 SQL文本 / TableAPI 代码转化为逻辑执…

如何保证前后端交互信息不被篡改。

先说说前后端有哪些认证方式来保证&#xff1a; 基于 session 的认证方式&#xff1a;前端在用户登录成功后&#xff0c;后端会在服务器端生成一个唯一的 session ID&#xff0c;并将该 session ID 返回给前端&#xff0c;在后续的请求中&#xff0c;前端需要带上该 session ID…

【漏洞复现】蓝凌OA——远程命令执行

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现 漏洞描述 蓝凌OA平台&#xff0c;数字化向纵深发展&#xff0c;正加速构建产业互联…

图解分布式事务中的2PC与Seata方案

文章目录 文章导图什么是2PC解决传统2PC方案XA方案DTP模型举例&#xff1a;新用户注册送积分总结&#xff1a; Seata方案设计思想执行流程举例&#xff1a;新用户注册送积分 Seata实现2PC事务&#xff08;AT模式&#xff09;前提整体机制写隔离读隔离实际案例理解要点说明核心代…

自动驾驶-机器人-slam-定位面经和面试知识系列06之C++STL面试题(02)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新&#xff0c;基本涵盖了自己秋招历程被问过的面试内容&#xff08;除了实习和学校项目相关的具体细节&#xff09;。在知乎和牛客&#xff08;某些文章上会附上内推码&#xff09;也会同步更新&a…

锅总详解开源组织之ASF

ASF是什么&#xff1f;ASF孵化的顶级项目有哪些&#xff1f;ASF顶级项目商用化有哪些&#xff1f;涉及的版权是什么&#xff1f;应用案例有哪些&#xff1f;衍生项目及其关联是什么&#xff1f;希望本文能帮您解答这些疑惑&#xff01; 一、ASF简介 Apache Software Foundati…

Java从入门到精通 (十一) ~ 操作系统、进程和线程

无论做什么&#xff0c;请记住都是为你自己而做&#xff0c;这样就毫无怨言&#xff01;今天&#xff0c;我为自己而活&#xff01;今天&#xff0c;又是美丽的一天&#xff01;早安&#xff0c;朋友&#xff01; 目录 前言 一、操作系统 1. 概念 2. 操作系统的基本功能 3…

Mindspore框架循环神经网络RNN模型实现情感分类|(五)模型训练

Mindspore框架循环神经网络RNN模型实现情感分类 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;一&#xff09;IMDB影评数据集准备 Mindspore框架循环神经网络RNN模型实现情感分类|&#xff08;二&#xff09;预训练词向量 Mindspore框架循环神经网络RNN模型实现…