【时间戳】

在编程竞赛和高效数据处理场景中,时间戳技巧是一种极其高效的标记方法,常用于避免频繁清空数组或 map,提高算法运行效率。本文将从定义、应用场景、模板代码、技巧细节等方面系统整理时间戳的使用方式。


一、时间戳技巧是什么?

时间戳技巧的本质:

用一个全局变量 timer 表示“当前时间戳”,数组 vis[x] 存储每个元素 x 的“上一次访问的时间戳”。通过比较 vis[x] == timer 来判断该元素是否已经被访问,无需每次清空整个数组。


二、为什么需要时间戳技巧?

清空数组或 map 可能非常耗时,尤其是在以下场景中:

  • 需要多次处理不同的数据组(如多组测试数据);
  • 访问标记数组下标空间较大(如 1 0 6 10^6 106);
  • 频繁使用 memset(vis, 0, sizeof vis) 等清空操作性能瓶颈。

通过时间戳技巧,避免每次清空数组或 map,只需递增一次全局时间戳变量 timer,达到同样的效果,且时间复杂度为 O ( 1 ) O(1) O(1)


三、典型应用场景

  1. 多组数据判断访问状态(替代清空)
  2. 图论中的 BFS / DFS 判重
  3. Trie 树判重、离线查询
  4. 模拟题中记录状态是否访问
  5. 哈希计数问题中清空频繁的 unordered_map

四、模板代码讲解

模板 1:数组版本

#include <bits/stdc++.h>
using namespace std;const int N = 1e6 + 10;int vis[N];    // 记录每个点上一次被访问的“时间”
int timer = 0; // 当前的时间戳void solve() 
{timer++;   // 每次处理新数据前只需 +1int n;cin >> n;for (int i = 0; i < n; i++) {int x;cin >> x;// 判断当前 x 是否在“本轮”被访问过if (vis[x] == timer) {cout << x << " 重复\n";} else {vis[x] = timer; // 标记为“本轮”访问}}
}

模板 2:map/unordered_map + 时间戳

#include <bits/stdc++.h>
using namespace std;unordered_map<string, int> mp;
int timer = 0;void solve() 
{timer++; // 新一轮处理int n;cin >> n;for (int i = 0; i < n; i++) {string name;cin >> name;if (mp[name] == timer) {cout << name << " 重复\n";} else {mp[name] = timer;}}
}

五、技巧总结

操作时间戳技巧优化点
判重数组不需要清空 vis[]
判重 mapmap<string, int> 记录时间戳
多组数据只需 ++timer 替代 memsetclear()
空间大数据时间戳替代清空,性能提升明显

六、注意事项

  • 时间戳不能回退,防止混淆。
  • vis[]map 初始值默认为 0,因此第一轮 timer = 1
  • timer全局变量,防止误覆盖。
  • 时间戳上限:如最多有 1 0 5 10^5 105 次操作,timer 开 int 足够。

七、常见题目举例

  • 牛客网、洛谷比赛中多组数据重复判断;
  • BFS 中防止重复访问节点;
  • Trie树中处理多组关键词判重;
  • 模拟题中清空操作频繁的场景。

八、总结

时间戳技巧是一种在竞赛中非常实用的优化手段,尤其适用于:

  • 大规模判重
  • 频繁使用多个数据组
  • 替代耗时的数组清空操作

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

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

相关文章

json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig)

有一次爬虫遇到了json的字符串响应对象 然后转为json对象 报这个错误 raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)", json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0) 意思是叫…

python训练day43 复习日

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader, random_split import matplotlib.pyplot as plt import numpy as np# 设置中文字体支持&#xff0c;避免绘图时中文…

C++11 lambda

前言 在Cpp11以前&#xff0c;为了把函数当作对象调用&#xff0c;可以使用C中的函数指针类型&#xff0c;也可以使用Cpp98的仿函数。 但二者都不是很好用&#xff0c;函数指针 return_type (*name)(parameters)的长相就令人望而却步&#xff0c;仿函数将一个函数重载为一个类…

【国产化-K8s】混合架构的 K8s + KubeSphere 部署指南

本文由 KubeSphere 社区贡献者 天行1st 编写。本文为作者实践总结。本文记录了在信创环境中基于混合架构&#xff08;x86 与 ARM64&#xff09;部署 Kubernetes 和 KubeSphere 的实践过程&#xff0c;覆盖多种国产 CPU 和操作系统&#xff0c;具有一定的参考价值。 环境涉及软…

利用python实现NBA数据可视化

大家好&#xff0c;今天我们利用python爬取NBA球星每年的比赛数据并进行可视化展示。主要用到三个模块&#xff1a;xpath、matplotlib。其中xpth负责爬取网站上的信息。Matplotlib是Python开发人员常用的Python绘图库&#xff0c;可以用来绘制各种2D图形&#xff0c;具有绘图质…

基于 SpringBoot+JSP 的医疗预约与诊断系统设计与实现

摘要 本研究针对传统医疗预约与诊断流程中存在的效率低下、信息不透明、患者等待时间长等问题&#xff0c;设计并实现了一个基于 SpringBootJSP 的医疗预约与诊断系统。系统采用 B/S 架构&#xff0c;整合了用户管理、科室管理、医生排班、预约挂号、在线问诊、检查检验、诊断…

2025.6.27总结

最近工作又开始内耗了&#xff0c;一位同事的转岗直接让我破防了&#xff0c;明明他工作干得很不错&#xff0c;会得又多&#xff0c;性格又好&#xff0c;我还经常请教他业务上的问题。我和他的关系并不算太好&#xff0c;但他加入其他部门&#xff0c;竟然让我有些不舍&#…

详解HashMap底层原理

核心数据结构&#xff1a;数组 链表 / 红黑树 HashMap 的底层核心是一个 Node<K,V>[] table 数组&#xff08;通常称为 桶数组 或 哈希桶数组&#xff09;。这个数组的每个元素称为一个 桶。 Node<K,V> (链表节点)&#xff1a; 这是存储键值对的基本单位&#xf…

历史项目依赖库Bugfix技巧-类覆盖

在项目维护过程中&#xff0c;我们可能会遇到历史项目依赖的第三方库出现BUG而需要修复的情况&#xff0c;而这些第三方库可能来源于公司自主开发或开源项目&#xff0c;但由于各种原因&#xff0c;这些库可能已无人维护。 此时&#xff0c;解决这个问题有三个办法 1、基于源…

多模态大型语言模型最新综述

多模态大型语言模型&#xff08;Multimodal Large Language Models&#xff0c;MLLMs&#xff09;已迅速发展&#xff0c;超越了文本生成的范畴&#xff0c;如今能够覆盖图像、音乐、视频、人类动作以及三维物体等多种输出模态。它们通过在统一架构下将语言与其他感知模态整合&…

使用ASIO的协程实现高并发服务器

使用ASIO的协程实现高并发服务器 在 C 网络编程领域&#xff0c;Asio 库提供了两种主要的异步编程范式&#xff1a;传统的回调模式和基于协程的现代模式&#xff0c;传统的回调模式大家都很清楚&#xff0c;这里不多做介绍&#xff0c;本文主要介绍基于协程的模式&#xff0c;…

OpenCV——轮廓检测

轮廓检测 一、轮廓检测二、轮廓的层级三、轮廓的特征3.1、轮廓面积3.2、轮廓周长3.3、边界矩形3.4、最小外接圆3.5、近似轮廓3.6、凸包 一、轮廓检测 轮廓可以简单的描述为具有相同颜色或灰度的连续点连在一起的一条曲线&#xff0c;轮廓通畅会显示出图像中物体的形状。关于轮…

高等概率论题解-心得笔记【15】

文章目录 拓扑参考文献 拓扑 参考文献 《测度论基础与高等概率论》

Windows 10关闭自动更新功能

Windows 10关闭自动更新功能&#xff0c;大家是不是经常用下面的几个步骤&#xff1a; 1、禁用Windows Update服务&#xff1b; 2、在组策略里关闭Win10自动更新相关服务&#xff1b; 3、禁用任务计划里边的Win10自动更新&#xff1b; 4、在注册表中关闭Win10自动更新&…

[Meetily后端框架] 配置指南 | 后端API网关 | API文档体系

链接: https://github.com/Zackriya-Solutions/meeting-minutes docs&#xff1a;会议纪要管理系统 本项目是一个专门用于**处理会议记录**的后端系统。 系统接收会议文本内容&#xff0c;利用先进的AI模型自动识别关键信息&#xff0c;包括行动项、决策内容以及截止期限。 处…

Flink2.0 配置 historyserver

Flink2.0 配置 historyserver 主要是去修改config.yaml配置文件 主要修改的点有两个 网上很多文档都是写的只配置一个 都是坑啊 historyserver :历史服务器 运行 Flink job 的集群一旦停止(例如yarn模式&#xff0c;程序一旦停止&#xff0c;集群也就关闭了)&#xff0c;只能去…

LLM的训练过程

一般而言&#xff0c;训练一个完整的 LLM 需要经过图1中的三个阶段——Pretrain、SFT 和 RLHF。 1.预训练 Pretrain&#xff0c;即预训练&#xff0c;是训练 LLM 最核心也是工程量最大的第一步。LLM 的预训练和传统预训练模型非常类似&#xff0c;同样是使用海量无监督文本对随…

用 AI + Canvas 生成图形、动画与图表

摘要 随着人工智能&#xff08;AI&#xff09;技术与 Web 可视化的结合&#xff0c;前端开发者可以通过自然语言生成复杂的图表、动画和交互式画布&#xff0c;极大地提升了开发效率和用户体验。本文作为《AI 前端&#xff1a;构建智能化 Web 应用的未来》专栏的第七篇&#…

SQL Server for Linux 如何实现高可用架构

关键词&#xff1a;SQL Server for Linux、高可用、读写分离、动态扩容、Always On、可用性组 &#x1f4cb; 文章目录 前言&#xff1a;Linux上的SQL Server不再是梦高可用架构设计 Always On 可用性组故障转移集群实例 读写分离架构 可用性组读写分离应用层读写分离 动态扩…

【51单片机流水灯控制4种造型,按下1,2,3,4时,数码管对应显示键号,同时流水灯对应四种造型】2022-6-1

缘由流水灯控制4种造型&#xff0c;按下1,2,3,4时&#xff0c;数码管对应显示键号&#xff0c;同时流水灯对应四种造型-编程语言-CSDN问答 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5…