【C++笔试强训】如何成为算法糕手Day1

db43723fcefb47a09b575a7812877e29.png


 学习编程就得循环渐进,扎实基础,勿在浮沙筑高台  

 循环渐进Forward-CSDN博客


笔试强训第一天


目录

 循环渐进Forward-CSDN博客

第一题:两个数组的交集

暴力循环法:

哈希法 :

数组下标法:

第二题:点击消除

第三题:统计数字


第一题:两个数组的交集

牛客网题目链接:两个数组的交集_牛客题霸_牛客网 (nowcoder.com)

给定两个整数数组分别为nums1nums1, nums2nums2,找到它们的公共元素并按返回。

数据范围:

1≤nums1.length,nums2.length≤10001≤nums1.length,nums2.length≤1000
1≤nums1[i],nums2[i]≤10001≤nums1[i],nums2[i]≤1000

解题思路:对于本题本人共有三种思路,第一种为暴力遍历循环法,第二种为数组下标法,第三种为哈希法


暴力循环法:

  1. 如果两个数组的当前元素相等,那么我们需要检查结果数组ans。如果ans为空,或者ans的最后一个元素与当前相等的元素不一致,我们就将这个相等的元素添加到ans中。之后,两个输入数组和结果数组的索引都向前移动一位。

  2. 如果两个数组的当前元素不相等,那么我们比较这两个元素的大小。将较小元素所在数组的索引向前移动一位,因为在已排序的数组中,如果较小数组中存在与较大元素相等的元素,它必然位于当前较小元素之后。

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {vector<int> ans;sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());int len1 = nums1.size();int len2 = nums2.size();// index1, index2作为遍历nums1 和 nums2的下标,index作为结果数组的下标int index1 = 0, index2 = 0, index = 0;  while(index1 < len1 && index2 < len2){if(nums1[index1] == nums2[index2]){if(ans.size()==0 || ans[index-1] != nums2[index2]){ //为了避免插入重复数据ans.push_back(nums1[index1]);index1++;index2++;index++;}else{index1++;index2++;}}else if(nums1[index1] < nums2[index2]){index1++;}else{index2++;}}return ans;}
};

哈希法 :

  1. 初始化一个名为result的数组,该数组用于存储两个数组共有的交集元素。

  2. 创建一个名为arr的数组,用于标记数组num1中的元素是否出现过。具体做法是将num1中的元素num1[i]作为arr的索引,例如如果数组中有元素2,则设置arr[2]为1,以此记录元素2在num1中出现过。

  3. 遍历数组num2,将num2中的每个元素作为索引去访问数组arr,检查arr对应位置的值是否为1。如果为1,说明这个元素在num1中也出现过,因此它是num1num2的交集元素。将该元素添加到result数组中,并且在这个过程中,result数组会自动去重,因为重复的元素不会被再次添加。

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> result;int arr[1004]={0};for(int i=0;i<nums1.size();i++){arr[nums1[i]]=1;}for(int i=0;i<nums2.size();i++){if(arr[nums2[i]]==1){result.insert(nums2[i]);}}return vector<int>(result.begin(), result.end());}
};

数组下标法:

利用数组下标记录出现重复的数字,是一个类似于哈希算法的方法。但时间和空间复杂度都过于高了。


#define max 100000 
class Solution {
public:int a[max][2];vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {int n=nums1.size(),s=nums2.size();vector<int> v;memset(a,0,sizeof(a));for(int i=0;i<n;i++){a[nums1[i]][0]=1;}for(int i=0;i<s;i++){a[nums2[i]][1]=1;}for(int i=0;i<max;i++){if(a[i][0]==1&&a[i][1]==1){v.push_back(i);}}return v;}
};

第二题:点击消除

牛客网做题链接:E-点击消除_牛客小白月赛25 (nowcoder.com)

牛牛拿到了一个字符串。
他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。
但相同而不相邻、不相同的相邻字母都是不可以被消除的。
牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?

输入描述:

        一个字符串,仅由小写字母组成。(字符串长度不大于300000)

输出描述:

        一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。

我们可以借鉴括号匹配的思路来解决这个问题。在这个方法中,我们使用一个字符串str来模拟栈的行为,以便于我们进行操作和输出。以下是具体步骤:

  1. 初始化一个字符串str作为我们的“栈”,用于存储和操作字符。
  2. 另一个字符串s用来接收我们需要处理的输入字符串。
  3. 开始遍历字符串s中的每个字符,进行以下操作:如果str的最后一个字符(即栈顶字符)与当前遍历到的s中的字符相同,那么我们将str的最后一个字符删除(相当于执行出栈操作)。如果不相同,则将当前遍历到的字符添加到str的末尾(相当于执行入栈操作)。
  4. 当遍历完整个字符串s后,字符串str中剩下的字符就是经过消除后的最终结果。

#include <iostream>
#include <string>
using namespace std;int main() {string str,s;cin >> s;for(auto i : s){if(str.size() && str.back() == i) //str不为空且与s相等{str.pop_back();}else{str.push_back(i);}}if(str.empty()) //判断为空的输出情况cout << "0" << endl;cout << str;
}

第三题:统计数字

牛客网做题链接:[NOIP2007]统计数字 (nowcoder.com)

题目描述:

某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输入描述:

第1行是整数n,表示自然数的个数。
第2~n+1行每行一个自然数。

输出描述:

输出m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开

 利用给出的范围当作循环的起始点和到达点,计算出个、十、百分位上的数字2。

#include<bits/stdc++.h>
using namespace std;
int main()
{int L, R;while(cin >> L >> R){int cnt = 0;for(int i = L; i <= R; i++){int j = i;while(j){if(j % 10 == 2) cnt++;j /= 10;}}cout << cnt << endl;}return 0;
}

 学习编程就得循环渐进,扎实基础,勿在浮沙筑高台


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

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

相关文章

MySQL:事务的ACID特性隔离级别脏读/不可重复读/幻读/Next-Key锁——场景复现

目录 1、什么是事务 2、 事务的ACID特性 2.1 事务的隔离性 3、为什么要使用事务&#xff1f; 4、查看支持事务的存储引擎 5、使用事务 5.1 控制事务 5.1.1 开启事务 5.1.2 关闭事务 5.2 开始一个事务&#xff0c;执行修改后回滚 5.3 开始一个事务&#xff0c;执行修…

句子成分——每日一划(十)

目录 一、原句 二、主要句子成分 三、 分词短语部分 四、定语从句部分 五、结构总结 六、句子改良 一、原句 Z-Library has always been a part of my study, providing many books that would otherwise require a lot of time or money to find. 来源&#xff1a;写作…

【网络安全】身份认证+wan优化+终端控制

用户身份认证 在允许用户访问你的网络时对其进行验证是至关重要的。不幸的是很多情况下&#xff0c;简单的用户名与密码验证并不可靠。公司通常需要更强大的针对访问信息价值较高系统(例如网络管理员系统与财务系统)的用户群体的验证。 双因子身份验证是根据“你知道的”和“你…

查询一条 SQL 语句的流程

查询一条sql语句的流程 连接器:建立连接&#xff0c;管理连接、校验用户身份查询缓存:查询语句如果命中查询缓存则直接返回&#xff0c;否则继续往下执行&#xff08;MSQL8.0 已删除&#xff09;解析 SQL&#xff1a;通过解析器对 SQL 查询语句进行词法分析、语法分析&#xf…

用uniapp 及socket.io做一个简单聊天 升级 9

比这之前优化了以下功能 上线通知 群聊里适时显示在线人数 约请好友 通过好友通过socket 相应端自动变化 PC端可以拉取摄象头拍照 PC端可以录音发送 拉起摄象头发送录象 <template><view class""><scroll-view scroll-y"true" class&…

Java启动Tomcat: Can‘t load IA 32-bit .dll on a AMD 64-bit platform报错问题解决

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

树莓派pico上手

0 介绍 不同于作为单板计算机的树莓派5&#xff0c;树莓派 pico 是一款低成本、高性能的微控制器板&#xff0c;具有灵活的数字接口。主要功能包括&#xff1a; 英国树莓派公司设计的 RP2040 微控制器芯片双核 Arm Cortex M0 处理器&#xff0c;弹性的时钟频率高达 133 MHz26…

Tomcat 靶场攻略

CVE-2017-12615 步骤一&#xff1a;环境搭建 cd vulhub/tomcat/CVE-2017-12615 docker-compose up -d docker ps 步骤二&#xff1a;漏洞复现 http://192.168.10.190:8080/ 步骤二&#xff1a;首页进行抓包 Tomcat允许适⽤put⽅法上传任意⽂件类型&#xff0c;但不允许js…

小程序-基础知识1

Mustache语法 小程序和vue一样提供了插值语法 但是小程序不能调用方法{{xxxx()}} hidden属性 hidden是所有组件都默认拥有的属性&#xff0c; hidden与wx:if的区别&#xff1a; wx:if是控制组件是否渲染,hidden控制显示或隐藏是通过添加hidden属性。 wx:for 除了可以遍历…

HCIA--实验十九:配置接口DCHP

一、实验内容 1.需求/要求&#xff1a; 通过一台5700交换机和一台PC&#xff0c;通过在交换机的接口上配置接口DHCP来实现PC自动获取ip地址。 二、实验过程 1.拓扑图&#xff1a; 2.步骤&#xff1a; 1.给vlan10配置ip地址&#xff0c;进入vlan10开启接口的DHCP&#xff1…

Java数据库连接——JDBC

目录 1、JDBC简介 2、JDBC应用 2.1 建立数据库连接 2.1.1 DriverManager静态方法获取连接 2.1.2 DataSource对象获取 2.2 获取SQL执行对象 2.2.1 SQL注入 2.2.2 Statement(执行静态SQL) 2.2.3 PreparedStatement(预处理的SQL执行对象) 2.3 执行SQL并返回结果 2.4 关…

【笔记】材料分析测试:晶体学

晶体与晶体结构Crystal and Crystal Structure 1.晶体主要特征 固态物质可以分为晶态和非晶态两大类&#xff0c;分别称为晶体和非晶体。 晶体和非晶体在微观结构上的区别在于是否具有长程有序。 晶体&#xff08;长程有序&#xff09;非晶&#xff08;短程有序&#xff09…

机器人机构、制造

简单整理一下&#xff0c;在学习了一些运动学和动力学之类的东西&#xff0c;简单的整合了一些常用的机械结构和图片。 1.电机&#xff1a; 市面上的电机有&#xff1a;直流电机&#xff0c;交流电机&#xff0c;舵机&#xff0c;步进电机&#xff0c;电缸&#xff0c;无刷电…

李宏毅结构化学习 03

文章目录 一、Sequence Labeling 问题概述二、Hidden Markov Model(HMM)三、Conditional Random Field(CRF)四、Structured Perceptron/SVM五、Towards Deep Learning 一、Sequence Labeling 问题概述 二、Hidden Markov Model(HMM) 上图 training data 中的黑色字为x&#xff…

基于单片机的水位检测系统仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;DHT11温湿度检测&#xff0c;水位检测&#xff0c;通过LCD1602显示&#xff0c;超过阈值报警&#xff0c;继电器驱动电机转动。通过矩阵按键切换选择设置各项参数阈值。 …

【Linux】通过内核以太层可查看应用程序运行时访问外网情况

比如&#xff0c;SourceInsight3.exe从外网接收信息&#xff1a; 下边是运行firefox时内核打印的日志&#xff0c;可以看到浏览器运行时调用了很多的操作系统内核系统调用&#xff0c;比如&#xff1a;文件读写、网络数据包的收发等等&#xff0c;其实这些日志还并不全&#x…

基于Ambari搭建hadoop生态圈+Centos7安装教程(还没写完,等明天补充完整)

当我们学习搭建hadoop的时候&#xff0c;未免也会遇见很多繁琐的事情&#xff0c;比如很多错误&#xff0c;需要解决。在以后公司&#xff0c;也不可能让你一个一个搭建hadoop&#xff0c;成千上万的电脑&#xff0c;你再一个个搭建&#xff0c;一个个报错&#xff0c;而且每台…

数据处理与统计分析篇-day08-apply()自定义函数与分组操作

一. 自定义函数 概述 当Pandas自带的API不能满足需求, 例如: 我们需要遍历的对Series中的每一条数据/DataFrame中的一列或一行数据做相同的自定义处理, 就可以使用Apply自定义函数 apply函数可以接收一个自定义函数, 可以将Series对象的逐个值或DataFrame的行/列数据传递给自…

K8s 之微服务的定义及详细资源调用案例

什么是微服务 用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&#xff1f; 需要通过微服务暴漏出去后才能被访问 Service是一组提供相同服务的Pod对外开放的接口。借助Service&#xff0c;应用可以实现服务发现和负载均衡。service默认只支持4层负载均衡能力&…

OpenCV特征检测(10)检测图像中直线的函数HoughLinesP()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在二值图像中使用概率霍夫变换查找线段。 该函数实现了用于直线检测的概率霍夫变换算法&#xff0c;该算法在文献 181中有所描述。 HoughLines…