【時間戳】

在編程競賽和高效數據處理場景中,時間戳技巧是一種極其高效的標記方法,常用于避免頻繁清空數組或 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
英文地址,請注明出處:http://en.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…