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

news2024/11/14 20:47:15

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

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

相关文章

“滑动窗口”思想在算法里面的应用

目录 一 无重复字符串的最长子串 链接&#xff1a;无重复字符的最长子串 1. 题目分析 解法一&#xff1a;暴力求解 借助2个“指针”&#xff1a;left &#xff0c; right 指针&#xff0c;依次固定left 指针&#xff0c;让right指针进行遍历&#xff0c;每遇到一个最大的 …

24/9/19 算法笔记 kaggle BankChurn数据分类

题目是要预测银行里什么样的客户会流失&#xff0c;流失的概率是多少 我这边先展示一下我写的二分类的算法 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model impo…

亚马逊IP关联揭秘:发生ip关联如何处理

在亚马逊这一全球领先的电商平台上&#xff0c;IP关联是一个不可忽视的问题&#xff0c;尤其是对于多账号运营的卖家而言。本文将深入解析亚马逊IP关联的含义、影响以及应对策略&#xff0c;帮助卖家更好地理解和应对这一问题。 什么是亚马逊IP关联&#xff1f; 亚马逊IP关联…

awk从0学习

1. 入门 1.1 什么是 awk&#xff1f; ①Awk是一种文本处理工具&#xff0c;适用于处理结构化数据&#xff0c;例如表格数据。 ②它可以读取一个或多个文本文件&#xff0c;并执行模式扫描和处理等指定的操作。 ③基本逻辑涉及数据的提取&#xff0c;排序和计算。 ④支持复…

Leetcode 2464. 有效分割中的最少子数组数目

1.题目基本信息 1.1.题目描述 给定一个整数数组 nums。 如果要将整数数组 nums 拆分为 子数组 后是 有效的&#xff0c;则必须满足: 每个子数组的第一个和最后一个元素的最大公约数 大于 1&#xff0c;且 nums 的每个元素只属于一个子数组。 返回 nums 的 有效 子数组拆分中…

Lumos学习王佩丰Excel第十五讲:条件格式与公式

一、使用简单的条件格式 1、为特定范围的数值标记特殊颜色 条件格式-需选择设定范围&#xff08;大于/小于/介于/......&#xff09;&#xff1a; 数值会动态根据条件判断更新颜色&#xff1a; 模糊匹配&#xff0b;条件格式&#xff1a;选择包含部分文本的特殊值 2、查找重复…

linux-----进程控制

提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、fork()函数 返回值&#xff1a;子进程返回0&#xff0c;父进程返回子进程的id,出错就返回-1. fork创建子进程&#xff0c;如果父子一方发生写入时&#xff0c;就会发生写实拷贝&#xff0c;操作系统就…

专业学习|动态规划(概念、模型特征、解题步骤及例题)

一、引言 &#xff08;一&#xff09;从斐波那契数列引入自底向上算法 &#xff08;1&#xff09;知识讲解 &#xff08;2&#xff09;matlap实现递归 &#xff08;3&#xff09;带有备忘录的遗传算法 &#xff08;4&#xff09;matlap实现带有备忘录的递归算法 “&#xff1…

0基础跟德姆(dom)一起学AI 数据处理和统计分析06-数据组合和缺失值处理

* 数据组合 * concat * merge * join(了解) * 缺失值处理 * apply方法详解 --- 1.DataFrame数据组合-concat连接 * 概述 * 连接是指把某行或某列追加到数据中, 数据被分成了多份可以使用连接把数据拼接起来 * 把计算的结果追加到现有数据集&#xff0c;也可以使用连…

Redis:常用命令总结

目录 1 . 前置内容 1.1 基本全局命令 KEYS EXISTS DEL EXPIRE TTL TYPE 1.2 数据结构和内部编码 2. String类型 SET GET MGET MSET INCR INCRBY DECR DECRBY INCRBYFLOAT 命令小结​编辑 内部编码 3 . Hash 哈希类型 HSET HGET HEXISTS HDEL HKEYS …

Qemu开发ARM篇-5、buildroot制作根文件系统并在qemu中进行挂载启动

文章目录 1、 buildroot源码获取2、buildroot配置3、buildroot编译4、挂载根文件系统 在上一篇 Qemu开发ARM篇-4、kernel交叉编译运行演示中&#xff0c;我们编译了kernel&#xff0c;并在qemu上进行了运行&#xff0c;但到最后&#xff0c;在挂载根文件系统时候&#xff0c;挂…

嵌入式单片机STM32开发板详细制作过程--01

大家好,今天主要给大家分享一下,单片机开发板的制作过程,原理图的制作与PCB设计,以及电子元器件采购与焊接。 第一:单片机开发板成品展示 板子正面都有各个芯片的丝印与标号,方便焊接元器件的时候,可以参考。(焊接完成之后,成品图如下) 第二:开发板原理图制作 在制…

OpenCV系列教程三:形态学、图像轮廓、直方图

文章目录 一、形态学1.1 阈值处理1.1.1 全局阈值处理1.1.2 全局阈值处理之Otsus 阈值法1.1.3 自适应阈值处理 1.2 腐蚀与膨胀1.2.1 腐蚀操作1.2.2 创建形态学卷积核1.2.3 膨胀操作 1.3 开运算和闭运算1.4 形态学梯度1.5 顶帽操作(tophat)1.6 黑帽操作&#xff08;Black Hat&…

基于JAVA+SpringBoot+Vue的社区智慧养老监护管理平台

基于JAVASpringBootVue的社区智慧养老监护管理平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1…

Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)

文章目录 二、命令列表2.1 jvm相关命令### 2.1.8 heapdump&#xff08;dump java heap, 类似 jmap 命令的 heap dump 功能&#xff09;举例1&#xff1a;假设你想生成一个只包含活动对象的堆转储文件&#xff0c;并将其保存为 /tmp/heapdump.hprof举例2&#xff1a;如果你想要进…

社区团购的创新与变革——融合开源链动 2+1 模式、AI 智能名片及 S2B2C 商城小程序

摘要&#xff1a;本文从信息流、资金流、物流角度深入分析社区团购的特点&#xff0c;探讨其如何避免传统线下中心零售的高展示成本与传统电商的高交付成本。同时&#xff0c;引入开源链动 21 模式、AI 智能名片及 S2B2C 商城小程序等创新元素&#xff0c;阐述它们为社区团购带…

MySQL---创建数据库(基于SQLyog)

目录 0.前言 1.基本认识 1.1编码集 1.2检验规则 2.库的创建和销毁 2.1指令介绍 2.2你可能会出现的问题 3.查看数据库属性 4.创建指定数据库 5.创建表操作 0.前言 之前写过一篇这个关于表的创建和销毁的操作&#xff0c;但是当时是第一次学习&#xff0c;肯定有些地方…

华为OD机试 - N个选手比赛前三名、比赛(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

【STM32】TIM定时器定时中断与定时器外部时钟的使用

TIM定时器定时中断与定时器外部时钟的使用 一、TIM定时器简介1、TIM&#xff08;Timer&#xff09;定时器2、定时器类型3、高级定时器4、通用定时器5、基本定时器6、定时中断基本结构代码编写&#xff1a;定时中断/外部时钟定时中断 7、预分频器时序8、计数器时序9、计数器无预…

手写SpringMVC

1、开发HspDispatcherServlet 2、完成客户端/浏览器可以请求控制层 目的&#xff1a;发出url请求时&#xff0c;经过前端控制器&#xff0c;找到Monster的List方法&#xff0c;把结果再打回去 3、从web.xml动态获取hspspringmvc.xml 4、完成自定义Service注解功能 目的&…