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

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 herevector<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 herevector<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;elsecout << stack << endl;return 0;
}

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

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

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

相关文章

百事可乐推出具有视频屏幕和人工智能技术的智能罐头

在最近于法国戛纳举行的国际创意节上&#xff0c;百事公司推出了创新的智能罐头。这些罐头不同于传统产品&#xff0c;它们采用了环绕式3D屏幕&#xff0c;能够展示高清视频内容&#xff0c;为品牌宣传和促销带来了全新的视角。经过两年多的精心研发&#xff0c;这些智能罐成为…

LLM原生开发路线图指南

引言 大型语言模型&#xff08;LLM&#xff09;正在迅速成为现代人工智能的基石。然而&#xff0c;目前还没有出现公认的最佳实践&#xff0c;而且先驱们往往没有明确的开发路线图。因此&#xff0c;这种状况急需要有人重新发明有关轮子&#xff1b;否则&#xff0c;将会使人陷…

spring中集成mybatis,并测试是否成功

首先你要配置pom.xml <!-- 连接 MySQL 数据库的驱动程序 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- spring-jdbc -->&…

Advanced slides插件无法预览幻灯片

advanced-slides的官方地址&#xff1a; MSzturc/obsidian-advanced-slides: Create markdown-based reveal.js presentations in Obsidian (github.com) 官方教程和文档&#xff1a; Advanced Slides Documentation (mszturc.github.io) 中文版也有博客翻译了&#xff1a;Ob…

软考中级系统集成项目管理工程师备考笔记

目录 一&#xff0c;通用内容 &#xff08;一&#xff09;信息与信息化 1.1&#xff0c;信息 信息基本概念 信息的传输模型 信息的质量属性 1.2&#xff0c;信息系统 信息系统的基本概念 信息系统定义 信息系统集成 1.3&#xff0c;信息化 信息化层次 信息化的核心…

66、基于长短期记忆 (LSTM) 网络对序列数据进行分类

1、基于长短期记忆 (LSTM) 网络对序列数据进行分类的原理及流程 基于长短期记忆&#xff08;LSTM&#xff09;网络对序列数据进行分类是一种常见的深度学习任务&#xff0c;适用于处理具有时间或序列关系的数据。下面是在Matlab中使用LSTM网络对序列数据进行分类的基本原理和流…

AD20操作使用part1

AD20的使用 原理图库&#xff0c;也称为元件库。文件的后缀为 .SchLib。 原理图就是表示电路板上各器件之间连接原理的图表&#xff0c;原理图绘制的前提是拥有所需的原理图库。 PCB库&#xff0c;也称为封装库。文件的后缀为 .PcbLib &#xff0c;在该文件中可以画各个器件的封…

简单爬虫案例——爬取快手视频

网址&#xff1a;aHR0cHM6Ly93d3cua3VhaXNob3UuY29tL3NlYXJjaC92aWRlbz9zZWFyY2hLZXk9JUU2JThCJTg5JUU5JTlEJUEy 找到视频接口&#xff1a; 视频链接在photourl中 完整代码&#xff1a; import requestsimport re url https://www.kuaishou.com/graphql cookies {did: web_…

《数字图像处理与机器视觉》案例三 (基于数字图像处理的物料堆积角快速测量)

一、前言 物料堆积角是反映物料特性的重要参数&#xff0c;传统的测量方法将物料自然堆积&#xff0c;测量物料形成的圆锥表面与水平面的夹角即可&#xff0c;该方法检测效率低。随着数字成像设备的推广和应用&#xff0c;应用数字图像处理可以更准确更迅速地进行堆积角测量。 …

便携式气象站:科技助力,气象观测的新选择

在气象观测领域&#xff0c;便携式气象站不仅安装方便、操作简单&#xff0c;而且功能齐全、性能稳定&#xff0c;为气象观测带来了极大的便利。 首先&#xff0c;便携式气象站的便携性&#xff0c;与传统的气象站相比&#xff0c;它不需要复杂的安装过程和固定的设备基础&…

Visual Studio 设置回车代码补全

工具 -> 选项 -> 文本编辑器 -> C/C -> 高级 -> 主动提交成员列表 设置为TRUE

从实验室走向商业化,人形机器人时代要来了?

从国内市场看&#xff0c;据机构报告显示&#xff0c;预计到2026年中国人形机器人产业规模将突破200亿元。特别是在生成式AI技术大爆发的当下&#xff0c;未来人形机器人更是极有可能实现超预期增长。 近日&#xff0c;特斯拉CEO埃隆马斯克(Elon Musk)在特斯拉2024年股东大会上…

【Unity设计模式】✨使用 MVC 和 MVP 编程模式

前言 最近在学习Unity游戏设计模式&#xff0c;看到两本比较适合入门的书&#xff0c;一本是unity官方的 《Level up your programming with game programming patterns》 ,另一本是 《游戏编程模式》 这两本书介绍了大部分会使用到的设计模式&#xff0c;因此很值得学习 本…

六西格玛培训引领久立特材品质新高度,行业领军再升级

久立特材六西格玛管理项目于6月27 日启动。久立特材作为行业内的领军企业&#xff0c;此次引入六西格玛管理法&#xff0c;旨在进一步提升企业运营效率和产品质量&#xff0c;实现持续改进和卓越运营。 久立特材的高层领导与张驰咨询的资深顾问朱老师共同出席项目启动仪式&am…

【python刷题】蛇形方阵

题目描述 给出一个不大于 99 的正整数n&#xff0c;输出n*n的蛇形方阵。从左上角填上1开始&#xff0c;顺时针方向依次填入数字&#xff0c;如同样例所示。注意每个数字有都会占用3个字符&#xff0c;前面使用空格补齐。 输入 输入一个正整数n,含义如题所述 输出 输出符合…

【正点原子K210连载】 第十二章 跑马灯实验 摘自【正点原子】DNK210使用指南-CanMV版指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DNK210开发板 2&#xff09;平台购买地址https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第十二章 跑马灯实验…

Cmake使用笔记1

cmake 问题1&#xff1a; Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043. 问题分析 在Windows平台上&#xff0c;使用CMake或Visual Studio等开发工具时&#xff0c;选择正确的Windows SDK版本以确保你的应用程序能够针对目标Windows版本进行编…

iptables(12)实际应用举例:策略路由、iptables转发、TPROXY

简介 前面的文章中我们已经介绍过iptables的基本原理,表、链的基本操作,匹配条件、扩展模块、自定义链以及网络防火墙、NAT等基本配置及原理。 这篇文章将以实际应用出发,列举一个iptables的综合配置使用案例,将我们前面所涉及到的功能集合起来,形成一个完整的配置范例。…

SpringMVC的架构有什么优势?——控制器(一)

文章目录 控制器(Controller)1. 控制器(Controller)&#xff1a;2. 请求映射(Request Mapping)&#xff1a;3. 参数绑定(Request Parameters Binding)&#xff1a;4. 视图解析器(View Resolver)&#xff1a;5. 数据绑定(Data Binding)&#xff1a;6. 表单验证(Form Validation)…

TAPD项目管理软件无法与企业微信进行关联

TAPD一段时间未使用后&#xff0c;需要重新启动&#xff0c;此时会出现你的企业微信尚未与TAPD账号关联的提示 解决方案&#xff1a;找到TAPD应用&#xff0c;先删除应用&#xff0c;然后再解除禁用即可