【刷题汇总--数字统计、两个数组的交集、点击消除(栈)】

C++日常刷题积累

  • 今日刷题汇总 - day001
    • 1、数字统计
      • 1.1、题目
      • 1.2、思路
      • 1.3、程序实现
    • 2、两个数组的交集
      • 2.1、题目
      • 2.2、思路
      • 2.3、程序实现
    • 3、点击消除(栈)
      • 3.1、题目
      • 3.2、思路
      • 3.3、程序实现

今日刷题汇总 - day001

1、数字统计

1.1、题目

请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。
比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。
输入描述:
输入共1行,为两个正整数L和R,之间用一个空格隔开。
输出描述:
输出共1行,表示数字2出现的次数。
示例1
输入:
2 22
输出:
6

1.2、思路

首先,通过题目得知我们需要统计数字2出现的次数,那么肯定要设置一个变量用于计数,这里使用count,然后,怎么来统计数字2使得count变化呢?不妨假设,在范围1~9个位数中,直接可得知只有一个2那么count=1,重点在于多位数的处理,比如出现22,个位数和十位数都存在数字2,都需要统计count++,该怎么处理呢?不难想到,我们拿取十位的数只需要将这个数除以10即可,比如22/10 = 2 ,再判断是否等于2 ,相等则count++即可,同理,拿取个位就是取余数即可,比如32 % 10 = 2,在判断余数2 == 2 ,则count++即可。再比如,三位数比如222,相同的道理,222%10 = 2,则count++,222/10=22,接着22%10=2,则count++,22/10=2,2%10 = 2,则count++,2/10=0则结束。思路清晰了,接下来,就是程序实现了。

1.3、程序实现

首先按照题目定义范围变量L,R,再用for循环1表示出来,并且定义一个计数的count变量。

#include <iostream>
using namespace std;

int main()
{
    int L,R;
    int count = 0;
    for(int i = L;i <= R;i++)
    {
        
    }
    return 0;
}

接着写,刚才分析的统计数字2的思路程序,利用while循环和取模运算以及除法运算,拿去当前变量‘ i ’的每一位数字,再判断是否等于数字2,相等则count++,不相等则取十位上的数,依次类推分别判断每一位上的数字。另外值得注意的是,我们会对变量‘ i ’进行运算操作,但是又不能更改其值,所以借助一个中间变量temp来实现代替运算即可。

#include <iostream>
using namespace std;

int main()
{
    int L,R;
    cin >> L >> R;
    int count = 0;
    for(int i = L;i <= R;i++)
    {
        int temp = i;
        while(temp)
        {
            if(temp % 10 == 2)
                count++;
            temp /= 10;
        }
    }
    cout << count;
    return 0;
}

在这里插入图片描述

在这里插入图片描述

2、两个数组的交集

2.1、题目

给定两个整数数组分别为num1、num2,找到它们的公共元素并按数组形式返回。
数据范围:
1≤num1.length,num2.length≤1000
1≤num1[i],num2[i]≤1000
示例1
输入:
[1,2 ],[2,2,2,2]
返回值:
[2]
说明:
两个数组的公共元素只有2

2.2、思路

首先,读完题能想到的大致都是遍历两个数组,如果第二个数组出现与第一个数组相等的数就将这个数插入到新的num3数组,最后遍历完后返回num3即可。当然,其中涉及到很多容易忽视的细节,比如同时出现多次相同的数时,就涉及到去重等问题。那么既然如此,就只好想到最优的解法就是利用哈希的思想,完成遍历和插入即可。意思就是,先将第一个数组元素全部丢进哈希表中,并且初始化为false类型的bool值,这样可以巧妙避免元素去重的问题。接下来,就是程序实现。

2.3、程序实现

首先,根据需要采用哈希表的解法,那么定义一个哈希表,结合题目范围要求,设置为hash[1001]即可,并且初始化为false,为后续遍历做准备。另外,定义一个nums3作为返回公共元素的数组。,再然后,利用范围for遍历第一个数组,置指定位置为true。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums1 int整型vector 
     * @param nums2 int整型vector 
     * @return int整型vector
     */
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        // write code here
        vector<int> nums3;
        bool hash[1001] = {false};
        for(auto num1 : nums1)
        {
            hash[num1] = true;
        }
        for(auto num2 : nums2)
        {
            
        }
        return nums3;
    }
};

接着,再根据思路分析的写核心判断语句和插入公共元素的语句即可。遍历第二个数组,如果哈希表对应位置已经为true,就说明为公共元素,则插入nums3,值得注意的是,紧接着就要置当前位置为fasle,就巧妙的避免了,相等元素再次插入nums3中了。

vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        // write code here
        vector<int> nums3;
        bool hash[1001] = {false};
        for(auto num1 : nums1)
        {
            hash[num1] = true;
        }
        for(auto num2 : nums2)
        {
            if(hash[num2])
            {
                nums3.push_back(num2);
                hash[num2] = false;
            }
        }
        return nums3;
    }

在这里插入图片描述
在这里插入图片描述

3、点击消除(栈)

3.1、题目

牛牛拿到了一个字符串。
他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。
但相同而不相邻、不相同的相邻字母都是不可以被消除的。
牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?
输入描述:
一个字符串,仅由小写字母组成。(字符串长度不大于300000)
输出描述:
一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。
示例1
输入:
abbc
复制
输出:
ac

3.2、思路

首先,读完题理解到需要实现的是消除相邻的相同小写字母,最后输出剩余的其它小写字母即可。那么,能方便使用的就是先进后出的特性,也就是利用模拟栈来比较控制栈内元素的处理。
为了方便理解我画个思路流程图:
(1)、以"abba"和"abbc"举例,首先,模拟栈的形式,栈开始为空,则第一个子母a为进栈;
在这里插入图片描述

(2)、接着第二个子母b判断栈顶元素a与自己b不同,如果相同,则栈内元素出栈,否则继续进栈。依次类推,直到字符串全部遍历结束。值得注意的是,由于涉及栈内元素出栈所以在判断栈顶元素与将要进栈的元素是否相同的同时,还需要判断栈内不为空才满足逻辑自洽。接下来,就是程序实现。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3、程序实现

首先第一部分,根据题目要求,定义并输入字符串str,再定义一个字符串stack模拟栈,接着,利用范围for,判断入栈元素和栈顶元素是否相同。如果相同,则执行出栈,否则继续入栈元素。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str;
    cin >> str;
    string stack;
    for(auto ch : str)
    {
        if(stack.back() == ch)
        {
            stack.pop_back();
        }
        else
        {
            stack += ch;
        }
    }
    return 0;
}

接着,我们加入栈内元素size的判断,避免栈空或越界的情况。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str;
    cin >> str;
    string stack;
    for(auto ch : str)
    {
        if(stack.size() && stack.back() == ch)
        {
            stack.pop_back();
        }
        else
        {
            stack += ch;
        }
    }

    return 0;
}

最后,str遍历完后,查看栈内size是否为空,为空则输出0,否则输出栈内元素stack即可。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str;
    cin >> str;
    string stack;
    for(auto ch : str)
    {
        if(stack.size() && stack.back() == ch)
        {
            stack.pop_back();
        }
        else
        {
            stack += ch;
        }
    }
    if(stack.size() == 0)
         cout << 0 <<endl;
    else
        cout << stack << endl;
    return 0;
}

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

reactjs18 中使用@reduxjs/toolkit同步异步数据的使用

react18 中使用reduxjs/toolkit 1.安装依赖包 yarn add reduxjs/toolkit react-redux2.创建 store 根目录下面创建 store 文件夹&#xff0c;然后创建 index.js 文件。 import { configureStore } from "reduxjs/toolkit"; import { counterReducer } from "…

【机器学习】语音转文字 - FunASR 的应用与实践(speech to text)

本文将介绍 FunASR&#xff0c;一个多功能语音识别模型&#xff0c;包括其特点、使用方法以及在实际应用中的表现。我们将通过一个简单的示例来展示如何使用 FunASR 将语音转换为文字&#xff0c;并探讨其在语音识别领域的应用前景。 一、引言 随着人工智能技术的不断发展&am…

达梦数据库系列—19. 动态增加实时备库

目录 动态增加实时备库 1、数据准备 2 、配置新备库 2.1配置 dm.ini 2.2配置 dmmal.ini 2.3 配置 dmarch.ini 2.4 配置 dmwatcher.ini 2.5 启动备库 2.6 设置 OGUID 2.7 修改数据库模式 3、 动态添加 MAL 配置 4、 动态添加归档配置 5、 修改监视器 dmmonitor.ini…

软考初级网络管理员__网站单选题

1.以下关于服务器端脚本的说法中&#xff0c;正确的是()。 Script 编写 只能采用VBScript 编写 浏览器不能解释执行 由服务器发送到客户端&#xff0c;客户端负责运行 2.站点首页最常用的文件名是()。 index.html homepage.html resource.html mainfrm.html 3.在HTML…

Vatee万腾平台:引领行业变革,创新未来

在当今这个快速变化的时代&#xff0c;科技的力量正在以前所未有的速度推动着行业的变革。Vatee万腾平台&#xff0c;以其独特的视角和前瞻性的布局&#xff0c;正引领着行业变革的浪潮&#xff0c;创新着未来的发展方向。 Vatee万腾平台是一家专注于科技研发和创新应用的领军企…

面试突击:ConcurrentHashMap 源码详解

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 前言 哈喽&#xff0c;大家好&#xff0c;我是 DanMu。这篇文章想和大家聊聊 ConcurrentHashMap 相关的知识点。严格来说&#xff0c;ConcurrentHashMap 属于java.lang.cur…

【电源拓扑】PFC

为什么开关电源中都有PFC电路 PFC电路就是功率矫正电路&#xff0c;目的是为了防止杂波对电网产生冲击 AC220V通过整流桥之后电压和电流的波形分析 PFC电路为什么选择是Boost升压电路 PFC电路为什么要把电压升高到400V 为了解决输入电压低于滤波电容电压这个矛盾&#xff0…

LDM-XRNY-102溜槽堵塞开关 JOSEF约瑟 接点容量:5A/380V

工作原理 当物料在溜槽中造成堵塞时&#xff0c;堆积的物料会给溜槽侧壁一个压力&#xff0c;从而推动LDM-XRNY-102溜槽堵塞开关的活动门向外或向内推移&#xff08;根据具体设计而定&#xff09;。 当活动门偏转一个设定的角度时&#xff0c;其控制开关会动作&#xff0c;发出…

基于Python的自动化测试框架-Pytest总结-第一弹基础

Pytest总结第一弹基础 入门知识点安装pytest运行pytest测试用例发现规则执行方式命令行执行参数 配置发现规则 如何编写测试Case基础案例断言语句的使用pytest.fail() 和 Exceptions自定义断言函数异常测试测试类形式 pytest的Fixture使用Fixture入门案例使用fixture的Setup、T…

[A133]全志u-boot中的I2C驱动分析

[A133]全志u-boot中的I2C驱动分析 hongxi.zhu 2024-6-27 一、IIC标准读写时序 IIC是高位(MSB)先传输 二、代码流程 2.1主机写数据 brandy/brandy-2.0/u-boot-2018/drivers/i2c/sunxi_i2c.c static int sunxi_i2c_write(struct i2c_adapter *adap, uint8_t chip,uint32_t addr…

深入解析 androidx.databinding.BaseObservable

在现代 Android 开发中&#xff0c;数据绑定 (Data Binding) 是一个重要的技术&#xff0c;它简化了 UI 和数据之间的交互。在数据绑定框架中&#xff0c;androidx.databinding.BaseObservable 是一个关键类&#xff0c;用于实现可观察的数据模型。本文将详细介绍 BaseObservab…

Centos7安装Minio笔记

一、Minio概述 Minio是一款开源的对象存储服务器&#xff0c;可以运行在多种操作系统上&#xff0c;包括Linux、Windows和MacOS等。提供一种简单、可扩展、高可用的对象存储解决方案&#xff0c;支持多种数据格式&#xff0c;包括对象、块和文件等。Minio是一款强大、灵活、可…

基于若依(ruoyi-vue)的周报管理系统

喂wangyinlon 填报人页面 审批人 审批不通过,填报人需要重新填写.

智慧校园新气象:校园气象站

在数字化、智能化的浪潮下&#xff0c;传统校园正在迎来一场革命性的变革。在这场变革中&#xff0c;校园气象站以其独特的功能和魅力&#xff0c;成为推动校园气象科普教育、提升校园品质的重要力量。 一、校园气象站&#xff1a;智慧校园的“气象眼” 校园气象站&#xff0c…

宠物医院管理系统-计算机毕业设计源码07221

目 录 1 绪论 1.1 选题背景和意义 1.2国内外研究现状 1.3论文结构与章节安排 2 宠物医院管理系统系统分析 2.1 可行性分析 2.1.1技术可行性分析 2.1.2 操作可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分…

Ansible 最佳实践:现代 IT 运维的利器

Ansible 最佳实践&#xff1a;现代 IT 运维的利器 Ansible 是一种开源的 IT 自动化工具&#xff0c;通过 SSH 协议实现远程节点和管理节点之间的通信&#xff0c;适用于配置管理、应用程序部署、任务自动化等多个场景。本文将介绍 Ansible 的基本架构、主要功能以及最佳实践&a…

为什么80%的码农都做不了架构师?

文章目录 一、技术广度和深度的要求1.1 技术广度1.2 技术深度 二、全局视角和系统思维2.1 全局视角2.2 系统思维 三、沟通能力和团队合作3.1 沟通能力3.2 团队合作 四、业务理解和需求分析4.1 业务理解4.2 需求分析 五、持续学习和创新能力5.1 持续学习5.2 创新能力 六、总结 &…

鸿蒙:页面路由使用

页面路由使用步骤&#xff1a; 1.导入Router模块 2.使用路由功能&#xff0c;以pushUrl模式为例 3.接收参数、返回 4.此时的路由是不能使用的&#xff0c;需要到main_pages.json中进行注册

FFmpeg视频处理工具安装使用

一、前言 FFmpeg是流行的开源视频处理工具&#xff0c;用于转码、合并、编辑等。以下是安装和使用方法&#xff1a; 二、步骤 1.下载 1.1 ffmpeg下载 官网下载地址 wget https://www.ffmpeg.org/releases/ffmpeg-6.1.1.tar.xz1.2 nasm下载 https://www.nasm.us/pub/nasm/…

PHP安龙县农产品销售网站-计算机毕业设计源码13137

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 相关技术介绍 2.1 PHP描述 2.2 MySQL数据库 2.3 Think PHP框架 3网站分析 3.1 可行性分析 3.2 网站流程分析 3.2.1 数据新增流程 3.2.2 数据删除流程 3.3 网站功能分析 3.3.1 功能性分析…