【蓝桥杯每日一题】3.28

news2025/4/3 3:14:09

Alt

🏝️专栏: 【蓝桥杯备篇】
🌅主页: f狐o狸x

"今天熬的夜,会变成明天奖状的闪光点!"


目录

一、唯一的雪花

        题目链接

        题目描述

        解题思路

        解题代码

二、逛画展

        题目链接

        题目描述

        解题思路

        解题代码

三、字符串

        题目链接

        题目描述

        解题思路

        解题代码

四、丢手绢

        题目链接

        题目描述

        解题思路

        解题代码


        喵~ 今天要学习的算法是双指针,也被称为滑动窗口是⼀种优化暴⼒枚举策略的⼿段:

• 当我们发现在两层 for 循环的暴⼒枚举过程中,两个指针是可以不回退的,此时我们就可以利⽤两个指针不回退的性质来优化时间复杂度。

一、唯一的雪花

        题目链接

        UVA11572 唯一的雪花 Unique Snowflakes

        题目描述

        解题思路

        例如题目中给的输入样例,我们可以按照以下方法来搞定此题:

        第一步:先初始化左右指针

         第二步:通过右指针向前走开始进窗口

         第三步:通过题意判断出窗口

        第四部:更新结果,重复上述步骤,直到遍历完全部数组

        解题代码

#include <iostream>
#include <unordered_map>

using namespace std;

typedef long long LL;

const int N = 1e6 + 10;

int n;
LL a[N];


int main()
{
	int T; cin >> T;
	while (T--)
	{
		cin >> n;
		for (int i = 1; i <= n; i++) cin >> a[i];

		// 初始化
		int left = 1, right = 1, ret = 0;
		unordered_map<int, int> mp;
		while (right <= n)
		{
			// 进窗口
			mp[a[right]]++;
			// 判断
			while (mp[a[right]] > 1)
			{
				mp[a[left]]--;
				left++;
			}
			// 更新结果
			ret = max(ret, right - left + 1);
			right++;
		}
		cout << ret << endl;
	}

	return 0;
}

二、逛画展

        题目链接

        P1638 逛画展 - 洛谷

        题目描述

        解题思路

        这题其实就是给你一串数字,让你找到包括所有数字种类的最小子串

        解题代码

#include <iostream>

using namespace std;

const int N = 1e6 + 10;

int a[N], mp[N];

int n, m;

int kind;

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++) cin >> a[i];

	// 初始化
	int left = 1, right = 1,begin = 1 , ret = n;
	while (right <= n)
	{
		// 进窗口
		if (mp[a[right++]]++ == 0) kind++;
		// 判断
		while (kind == m)
		{
			// 更新结果
			int len = right - left ;
			if (len < ret)
			{
				ret = len;
				begin = left;
			}
			// 出窗口
			if (mp[a[left++]]-- == 1) kind--;
		}

	}
	cout << begin << " " << begin + ret - 1 << endl;
	return 0;
}

三、字符串

        题目链接

        字符串 

        题目描述

        解题思路

        这题和上一题是一样的,只是把数字改成字符串了

        解题代码

#include <iostream>

using namespace std;

const int N = 30;

int mp[N];
int kind;

int main()
{
    string s; cin >> s;
    int n = s.size();
    // 初始化
    int left = 0, right = 0, ret = n;
    while(right < n)
    {
        // 进窗口
        if(mp[s[right++] - 'a']++ == 0) kind++;
        // 判断
        while(kind == 26)
        {
            // 更新结果
            int len = right - left;
            ret = min(ret, len);
            // 出窗口
            if(mp[s[left++] - 'a']-- == 1) kind--;
        }
    }
    cout << ret << endl;
    return 0;
}

四、丢手绢

        题目链接

        丢手绢

        题目描述

        解题思路

        这个题依然可以用双指针来解决,只不过是从一条直线变成了一个环而已

        解题代码

#include <iostream>

using namespace std;

typedef long long LL;

const int N = 1e5 + 10;

LL a[N];

int n;

int main()
{
    cin >> n;
    LL sum;
    for(int i = 1; i <= n; i++) 
    {
        cin >> a[i];
        sum += a[i];
    }
    LL mid = sum / 2;
    // 初始化
    LL left = 1, right = 1, ret = 0, len = 0;
    while(right <= n)
    {
        // 进窗口
        if(len <= mid) 
        {
            len += a[right++];
        }
        // 判断
        while(len > mid)
        {
            // 更新结果
            ret = max(sum - len, ret);
            // 出窗口
            len -= a[left++];
        }
        if(ret > mid) ret = sum - ret;
        ret = max(ret, len);
    }
    cout << ret << endl;
    return 0;
}

        总之,对于双指针这类型的题目就四步:1. 初始化 2. 进窗口 3. 判断出窗口 4. 更新结果

        明天我们将学习二分算法,感兴趣的朋友记得关注我哟~

        886~

"今天的bug是明天的经验值"

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

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

相关文章

万字长文详解Text-to-SQL

什么是Text-to-SQL 在各个企业数据量暴涨的现在&#xff0c;Text-to-SQL越来越重要了&#xff0c;所以今天就来聊聊Text-to-SQL。 Text-to-SQL是一种将自然语言查询转换为数据库查询的技术。它可以让用户通过自然语言来查询数据库&#xff0c;而不需要编写复杂的SQL语句。 T…

【Linux】动静态库的制作与使用

一.对软硬链接的补充 1、无法对目录进行硬链接 为什么呢&#xff1f; 首先&#xff0c;我们在访问文件时&#xff0c;每一个文件都会有自己的dentry结构&#xff0c;这些结构会在内存中维护一棵路径树&#xff0c;来快速进行路径查找。但是如果某个节点直接使用硬链接到了根节…

ubuntu22.04 如何安装 ch341 驱动

前言 本篇是介绍ubuntu22.04如何安装 ch341 驱动&#xff0c;并对其中遇到的问题进行整理。 一、流程 1.1 查看CH340驱动 首先是查看ubuntu22.04系统自带的驱动&#xff0c;用以下命令即可 ls /lib/modules/$(uname -r)/kernel/drivers/usb/serial 然后会跳出以下界面&…

个人博客网站从搭建到上线教程

步骤1:设计个人网站 设计个人博客网站的风格样式,可以在各个模板网站上多浏览浏览,以便有更多设计网站风格样式的经验。 设计个人博客网站的内容,你希望你的网站包含哪些内容如你的个人基本信息介绍、你想分享的项目、你想分享的技术文档等等。 步骤2:选择开发技术栈 因…

mac m4 Homebrew安装MySQL 8.0

1.使用Homebrew安装MySQL8 在终端中输入以下命令来安装MySQL8&#xff1a; brew install mysql8.0 安装完成后&#xff0c;您可以通过以下命令来验证MySQL是否已成功安装&#xff1a; 2.配置mysql环境变量 find / -name mysql 2>/dev/null #找到mysql的安装位置 cd /op…

UE5学习笔记 FPS游戏制作26 UE中的UI

文章目录 几个概念创建一个UI蓝图添加UI获取UI的引用 切换设计器和UI蓝图将UI添加到游戏场景锚点轴点slotSizeToContent三种UI数据更新方式(Text、Image)函数绑定属性绑定事件绑定 九宫格分割图片按钮设置图片绑定按下事件 下拉框创建添加数据修改样式常用函数 滚动框创建添加数…

Navicat导出mysql数据库表结构说明到excel、word,单表导出方式记录

目前只找到一张一张表导出的方式 使用information_schema传入表名查询 字段名根据需要自行删减&#xff0c;一般保留序号、字段名、类型、说明就行 SELECT COLUMNS.ORDINAL_POSITION AS 序号, COLUMNS.COLUMN_NAME AS 字段名, COLUMNS.COLUMN_TYPE AS 类型(长度), COLUMNS.N…

Linux驱动开发 中断处理

目录 序言 1.中断的概念 2.如何使用中断 中断处理流程 中断上下文限制 屏蔽中断/使能 关键区别与选择 上半部中断 下半部中断 软中断&#xff08;SoftIRQ&#xff09; 小任务(Tasklet) 工作队列&#xff08;Workqueue&#xff09; 线程 IRQ&#xff08;Threaded IRQ…

Centos主机检查脚本

使用方法&#xff1a; 将脚本保存为 CentOS_syscheck.sh 添加执行权限&#xff1a; chmod x CentOS_syscheck.sh 执行脚本&#xff1a; ./CentOS_syscheck.sh #!/bin/bash# 设置颜色变量 RED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m BLUE\033[0;34m NC\033[0m # 重置…

python系统之综合案例:用python打造智能诗词生成助手

不为失败找理由&#xff0c;只为成功找方法。所有的不甘&#xff0c;因为还心存梦想&#xff0c;所以在你放弃之前&#xff0c;好好拼一把&#xff0c;只怕心老&#xff0c;不怕路长。 python系列之综合案例 前言一、项目描述二、项目需求三、 项目实现1、开发准备2、代码实现 …

23种设计模式-结构型模式-桥接器

文章目录 简介问题解决方案示例总结 简介 桥接器是一种结构型设计模式&#xff0c;可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&#xff0c;从而能在开发时分别使用。 问题 假如你有一个几何形状Shape类&#xff0c;它有两个子类&#xff1a;圆形C…

K8S学习之基础五十八:部署nexus服务

部署nexus服务 Nexus服务器是一个代码包管理的服务器&#xff0c;可以理解 Nexus 服务器是一个巨大的 Library 仓库。Nexus 可以支持管理的工具包括 Maven &#xff0c; npm 等&#xff0c;对于 JAVA 开发来说&#xff0c;只要用到 Maven 管理就可以了。Nexus服务器作用&#x…

Docker Desktop 界面功能介绍

Docker Desktop 界面功能介绍 左侧导航栏 Containers(容器): 用于管理容器,包括查看运行中或已停止的容器,检查容器状态、日志,执行容器内命令,启动、停止、删除容器等操作。Images(镜像): 管理本地 Docker 镜像,可查看镜像列表、从 Docker Hub 拉取新镜像、删除镜…

C++ set map

1.set和map是什么 set和map是 C STL 提供的容器&#xff0c;用于高效的查找数据&#xff0c;底层采用红黑树实现&#xff0c;其中set是Key模型&#xff0c;map是Key-Value模型 set和map的基本使用较为简单&#xff0c;这里不再叙述&#xff0c;直接进入实现环节 2.set和map的…

Spring AI Alibaba 对话记忆使用

一、对话记忆 (ChatMemory)简介 1、对话记忆介绍 ”大模型的对话记忆”这一概念&#xff0c;根植于人工智能与自然语言处理领域&#xff0c;特别是针对具有深度学习能力的大型语言模型而言&#xff0c;它指的是模型在与用户进行交互式对话过程中&#xff0c;能够追踪、理解并利…

Ubuntu24.04 离线安装 MySQL8.0.41

一、环境准备 1.1 官方下载MySQL8.0.41 完整包 1.2 上传包 & 解压 上传包名称是&#xff1a;mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundle.tar # 切换到上传目录 cd /home/MySQL8 # 解压&#xff1a; tar -xvf mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundl…

SOME/IP-SD -- 协议英文原文讲解10

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.5 Non…

Ubuntu上给AndroidStudio创建桌面图标

最近使用了Ubuntu开发了&#xff0c;默认的android studio没有桌面图标&#xff0c;还是很不方便&#xff0c;每次都要cd到bin目录启动studio.sh。 步骤1&#xff1a;cd /usr/share/applications linux系统里面&#xff0c;所有的应用启动入口都在 /usr/share/applications …

简单视图函数

视图函数 文章目录 视图函数[toc]一、什么是视图函数二、简单视图函数三、返回错误视图 一、什么是视图函数 所谓视图函数&#xff08;简称视图&#xff09;&#xff0c;本质上就是一个Python函数&#xff0c;用于接收Web请求并且返回Web响应。Web响应可以包含很多类型&#x…

蓝桥杯备考----》完全背包模板

其实这个完全背包的步骤和01背包也是差不多滴&#xff0c;不过他有一些优化是我们必须要说一说的 老样子&#xff0c;我们先定义一下状态表示 step1: f[i][j]表示从1到i个物品里选出体积不超过j的最大价值 step2:状态转移方程 写成一行就是 我们再写一下f[i][j-v[i]]的表达…