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

news2024/11/18 19:58:41

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.coloradmin.cn/o/1882374.html

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

相关文章

智能制造企业CRM系统推荐清单(2024版)

当前&#xff0c;CRM市场呈现出“国际龙头优势逐渐下降&#xff0c;国产CRM奋起直追”的格局。智能制造企业在选型CRM时&#xff0c;如何选择合适的系统是一个需要重视的课题。 在我们之前的文章《一文读懂CRM&#xff0c;2023年30家CRM系统对比&#xff08;近年最全&#xf…

如何在AWS上使用免费的服务器

要在AWS上免费使用的服务器&#xff0c;你可以按照以下步骤操作&#xff1a; &#xff08;1&#xff09;注册AWS账户&#xff1a; 访问AWS官方网站&#xff08;https://aws.amazon.com/cn/&#xff09;&#xff0c;点击右上角的“完成注册”&#xff0c;按照页面提示填写相关…

经典小游戏(一)C实现——三子棋

switch(input){case 1:printf("三子棋\n");//这里先测试是否会执行成功break;case 0:printf("退出游戏\n");break;default :printf("选择错误&#xff0c;请重新选择!\n");break;}}while(input);//直到输入的结果为假&#xff0c;循环才会结束} …

基于FreeRTOS+STM32CubeMX+LCD1602+MCP23S09(SPI接口)的I/O扩展器Proteus仿真

一、仿真原理图: 二、运行效果: 三、STM32CubeMX配置: 1)、GPIO配置: 2)、SPI配置: 四、部分软件: 1)、主函数: /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : mai…

游戏AI的创造思路-技术基础-关于艾宾浩斯遗忘曲线的迷思

对于艾宾浩斯遗忘曲线和函数&#xff0c;我一直都有小小的迷思&#xff0c;总想实验下用艾宾浩斯函数来替换sigmoid函数作为激活函数&#xff0c;打造更接近人类的AI算法&#xff0c;这篇文章旨在讨论下 目录 3.10. 艾宾浩斯曲线 3.10.1. 定义 3.10.1.1. 曲线计算公式 3.10…

想用AI高端算力训练模型?试试英智BayStone平台

随着生成式人工智能的迅猛增长&#xff0c;各大公司纷纷推出强大的 AI产品以提升自身核心竞争力&#xff0c;对于依赖基础模型进行推理训练&#xff0c;同时需要高级基础设施的人工智能初创企业&#xff0c;急需使用高端智算算力来加速模型训练与产品研发创新。 算力是否充足&…

测试接口的完整流程

背景 今天睿哥给我布置了一个任务&#xff0c;叫我学习一下如何测试接口。 然后我就上网搜索去了解了一下&#xff0c;看看测试接口是什么。看了很久之后&#xff0c;我大概对接口测试有了一定的理解。 通俗来说&#xff0c;接口测试就是使用某种工具模拟客户端发送http请求…

Github 上 Star 数最多的大模型应用基础服务 Dify 深度解读(一)

背景介绍 接触过大模型应用开发的研发同学应该都或多或少地听过 Dify 这个大模型应用基础服务&#xff0c;这个项目自从 2023 年上线以来&#xff0c;截止目前&#xff08;2024-6&#xff09;已经获得了 35k 多的 star&#xff0c;是目前大模型应用基础服务中最热门的项目之一…

HEC-HMS水文模型教程

原文链接&#xff1a;HEC-HMS水文模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607904&idx5&sn1a210328a3fc8f941b433674d8fe2c85&chksmfa826787cdf5ee91d01b6981ebd89deac3e350d747d0fec45ce2ef75d7cb8009341c6f55114d&token90645021…

智能驾驶系列报告:特斯拉智能驾驶方案简剖

不同于绝大多数国内车企在自动驾驶上采取多传感器融合方案&#xff0c;特斯拉FSD在发展初期就摒弃激光雷达、且不配备高清地图&#xff0c;成为在感知层以摄像头为核心的纯视觉解决方案代表;其依靠车身搭载的摄像头来捕捉周围的环境信息&#xff0c;并经过算法及神经网络模型处…

JOSEF约瑟 YHSJ-J打滑开关 使用带速0.3-5.0m/s

产品概述&#xff1a; YHSJ-J打滑开关是一种智能型超速打滑检测器&#xff0c;采用非接触式监测方式&#xff0c;自动采集设备正常运行时的转速&#xff0c;并通过监测转速变化量和相关控制参数进行比较&#xff0c;以判断是否存在打滑现象。 该产品已广泛应用于输送系统中&…

【智慧水利数字孪生解决方案】

在2024年全国水利工作重点会议上&#xff0c;水利部部长李国英发表重要讲话&#xff0c;强调&#xff1a;大力推进数字孪生水利建设。坚持需求牵引、应用至上、数字赋能、提升能力&#xff0c;加快构建数字孪生水利体系&#xff0c;为水利治理管理提供前瞻性、科学性、精准性、…

“论云上自动化运维及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 云上自动化运维是传统IT运维和DevOps的延伸&#xff0c;通过云原生架构实现运维的再进化。云上自动化运维可以有效帮助企业降低IT运维成本&#xff0c;提升系统的灵活度&#xff0c;以及系统的交付速度&#xff0c;增强系统的可靠性&#xff0c;构建更加安全、可信、…

明星中药企业系列洞察(九)一手好牌打的稀烂!近500年老字号锁定退市,太安堂为何“塌房”了?

近日&#xff0c;太安堂发布公告称&#xff0c;公司已收到深交所下发的《关于广东太安堂药业股份有限公司股票终止上市的决定》&#xff0c;深交所决定终止公司股票上市&#xff0c;预计其最后交易日期为7月4日。太安堂曾作为国内知名的中成药上市公司之一&#xff0c;是国家级…

动捕系统如何解决“超出捕捉范围”的挑战

惯性运动捕捉系统改变了我们捕捉运动的方式&#xff0c;使艺术家、创作者和独立工作室能够摆脱动捕实验室和复杂设置的限制。通过身体上的传感器和无线连接&#xff0c;动捕演员可以自由移动和并作出各种高难度动作。然而具有高自由度的惯性动捕系统&#xff0c;经常面临着超出…

深入解析 androidx.databinding.BaseObservable

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

雨量气象站:野外监测的得力助手

在广阔无垠的大自然中&#xff0c;雨量、风力、风向、温湿度以及大气压力等气象数据对于各种应用场景都至关重要。特别是在野外、森林防火、山洪监测等无市电供电的场合&#xff0c;一款高效可靠的监测设备更是不可或缺。雨量气象站正是为了满足这些需求而诞生的户外专用监测站…

昇思25天学习打卡营第8天|模型训练

昇思25天学习打卡营第8天|模型训练 前言模型训练构建数据集定义神经网络模型定义超参、损失函数和优化器超参损失函数优化器 训练与评估 个人任务打卡&#xff08;读者请忽略&#xff09;个人理解与总结 前言 非常感谢华为昇思大模型平台和CSDN邀请体验昇思大模型&#xff01;从…

剖析DeFi交易产品之UniswapV4:概述篇

本文首发于公众号&#xff1a;Keegan小钢 UniswapV4 与 UniswapV3 相比&#xff0c;算法上并没有什么改变&#xff0c;依然还是采用集中流动性模型&#xff0c;但架构上变化很大&#xff0c;包括功能架构&#xff0c;也包括技术架构。相比之前的版本&#xff0c;UniswapV4 最大…

光扩散微球市场增长空间大 我国已实现其产业化

光扩散微球市场增长空间大 我国已实现其产业化 光扩散微球是一种高性能微球材料&#xff0c;具有优异的光学和力学性能&#xff0c;且不含杂质&#xff0c;将其涂抹在光扩散膜&#xff08;板&#xff09;上&#xff0c;可以将点光源变成面光源&#xff0c;使显示面板的布光更加…