hash,以及數據結構——map容器

1.hash是什么?

定義:hash,一般翻譯做散列、雜湊,或音譯為哈希,是把任意長度的輸入(又叫做預映射pre-image)通過散列算法變換成固定長度的輸出, 該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間。

這么一說肯定會覺得很難,這百度百科果然不適合小白,可惡

用大白話來說,舉個例子,我們有一個字符串ABC,我們會通過一系列運算將其轉換為哈希值,使其與別的字符串不相同

哈希算法不過是一個更為復雜的運算,它的輸入可以是字符串,可以是數據,可以是任何文件,經過哈希運算后,變成一個固定長度的輸出, 該輸出就是哈希值。但是哈希算法有一個很大的特點,就是你不能從結果推算出輸入,所以又稱為不可逆的算法

2.map容器(map<T1, T2>SUM)

注:T1和T2都是數據類型

map是STL的一個關聯容器,它提供一對一的hash。

T1可以稱為關鍵字(key),每個關鍵字只能在map中出現一次;

T2可以稱為該關鍵字的值(value);

因此我們就可以借助map函數來輕易實現hash的用法,那么我們來看幾個簡單的例題

3.例題

(1)第一題:?字符串哈希模版

題解:剛做這道題的時候我并沒有了解到map函數,導致我的代碼顯得很冗長,是自己去實現map函數的功能的,我首先想到的就是可不可以將abc這種字符串換成一個整數,然后我就想著直接累加,后續我又想到了可能會存在沖突,比如說abc的值等于cba的值,因此我給字符串加上了進制,每一位都多乘一個10,然后,我才過的,如果當前那個數組存在當前值,就減一,最后輸出總值,請看AC代碼

#include<bits/stdc++.h>
using namespace std;
int n,sum;
char a[10005][2000];
unsigned long long b[10005];
int len[10005];
unsigned long long tt=47;
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){int cnt=0;int ans=0;scanf("%s",a[i]);len[i]=strlen(a[i]);while(cnt<=len[i]){ans=ans*tt+(unsigned long long)a[i][cnt];cnt++;}b[i]=ans;}sort(b+1,b+n+1);for(int i=1;i<=n-1;i++){if(b[i]!=b[i+1])sum++;}printf("%d",sum+1);return 0;
} 

(2) 第二題:錯誤點名的開始

?、題解:這時候我就已經學會用map函數了,因此,直接用map函數可以迅速秒殺這道題

#include <bits/stdc++.h>
using namespace std;
int n,m;
string s;
map<string,int>sum;
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){cin>>s;sum[s]=1;}scanf("%d",&m);for(int i=1;i<=m;i++){cin>>s;if(sum[s]==1){printf("OK\n");sum[s]++;continue;}if(sum[s]<1)printf("WRONG\n");if(sum[s]>1)printf("REPEAT\n");}return 0;
}

第三題:密文搜索

題解:我們只需要將后面的密碼轉變為哈希數,然后從上述字符串中取出連續的八個字符,如果其哈希值和下面的密碼一樣的話,就說明,配對成功,次數要加1,最后統計總數即可

#include<bits/stdc++.h>
using namespace std;
map<string,int>sum;
string s,t;
int n;
int ans;
int main()
{cin>>s;scanf("%d",&n);for(int i=0;i<n;i++){cin>>t;sort(t.begin(),t.end());sum[t]++;}for(int i=0;i<s.size()-7;i++){t=s.substr(i,8);sort(t.begin(),t.end());ans+=sum[t];}printf("%d",ans);return 0;
}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697703.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu/WSL下生產密鑰腳本

說明&#xff1a; 有時候需要為開發人員配發密鑰&#xff0c;為方便寫了個小腳本&#xff0c;在linux下運行&#xff0c;要求 python10, putty-tools。 使用時&#xff0c;在staffList定義用戶列表&#xff0c;運行后程序自動產生對應目錄及密鑰。 安裝&#xff1a; apt inst…

jenkins報錯:Pseudo-terminal will not be allocated because stdin is not a terminal

jenkins的流水線部分代碼如下 sh ssh root192.168.2.234 << remotessh cd /var/lib/jenkins/workspace/txkc /usr/local/maven/apache-maven-3.8.6/bin/mvn clean package -U ls remotessh執行流水線出現報錯&#xff1a;Pseudo-terminal will not be allocated because…

如何把電腦上的png圖片變為jpg?圖片格式在線轉化的方法

由于jpg文件比較小&#xff0c;把png格式轉換后更適合我們的保存和使用&#xff0c;尤其是對于一些平臺上傳來說&#xff0c;很多地方都要求圖片格式為jpg&#xff0c;為了能更順利的上傳&#xff0c;本文就叫大家一個圖片格式轉換的方法&#xff0c;使用壓縮圖網站&#xff0c…

第2.1章 StarRocks表設計——概述

注&#xff1a;本篇文章闡述的是StarRocks-3.2版本的表設計相關內容。 建表是使用StarRocks非常重要的一環&#xff0c;規范化的表設計在某些場景下能使查詢性能有數倍的提升。StarRocks的表設計涉及到的知識點主要包括數據表類型、數據分布&#xff08;分區分桶及排序鍵&#…

golang命令行工具gtcli,實現了完美集成與結構化的gin腳手架,gin-restful-api開箱即用

關于gtools golang非常奈斯&#xff0c;gin作為web框架也非常奈斯&#xff0c;但我們在開發過程中&#xff0c;前期搭建會花費大量的時間&#xff0c;且還不盡人意。 為此我集成了gin-restful-api的模板gin-layout&#xff0c;還有腳手架一鍵生成項目。 集成相關 ginviperz…

【Android】性能優化之內存、網絡、布局、卡頓、安裝包、啟動速度優化

歡迎來到 Android 開發老生常談的性能優化篇&#xff0c;本文將性能優化劃分為內存、網絡、布局、卡頓、安裝包、啟動速度七塊&#xff0c;從這七塊優化出發&#xff0c;闡述優化的 Application 的方式。 目錄 內存優化避免內存泄漏使用內存分析工具優化數據結構和算法數據緩存…

Jmeter基礎(1) Mac下載安裝啟動

目錄 Jmeter下載安裝啟動下載啟動 Jmeter下載安裝啟動 注意??&#xff1a;使用jmeter需要有java環境 下載 官網下載地址&#xff1a;https://jmeter.apache.org/ 會看到這里有兩個版本&#xff0c;那么有什么區別么&#xff1f; Binaries是可執行版&#xff0c;直接下載解…

Python算法題集_圖論(課程表)

Python算法題集_課程表 題207&#xff1a;課程表1. 示例說明2. 題目解析- 題意分解- 優化思路- 測量工具 3. 代碼展開1) 標準求解【循環遞歸全算】2) 改進版一【循環遞歸緩存】3) 改進版二【循環遞歸緩存反向計算】4) 改進版三【迭代剝離計數器檢測】 4. 最優算法5. 相關資源 本…

Spring整合Junit4和Junit5

1、整合的好處 好處1&#xff1a;不需要自己創建IOC容器對象了好處2&#xff1a;任何需要的bean都可以在測試類中直接享受自動裝配 2、操作 整合junit4 ①加入依賴 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><…

代碼隨想錄算法訓練營第二十三天補|669. 修剪二叉搜索樹 ● 108.將有序數組轉換為二叉搜索樹 ● 538.把二叉搜索樹轉換為累加樹

平衡樹、二叉樹、靈活應用中序遍歷&#xff08;值大小有序&#xff09; 669. 修剪二叉搜索樹 給你二叉搜索樹的根節點 root &#xff0c;同時給定最小邊界low 和最大邊界 high。通過修剪二叉搜索樹&#xff0c;使得所有節點的值在[low, high]中。修剪樹 不應該 改變保留在樹中…

Window部署SkyWalking

SkyWalking mysql的驅動依賴 選擇下載版本 v9.4 現在后解壓縮目錄結構 一、修改config目錄文件 application.yml 修改1&#xff1a; selector: ${SW_STORAGE:h2} 修改后&#xff1a; selector: ${SW_STORAGE:mysql} 修改2&#xff1a;使用mysql數據庫 mysql: properti…

通俗易懂分析:Vite和Webpack的區別

1、對項目構建的理解 先從瀏覽器出發&#xff0c; 瀏覽器是由瀏覽器內核和JS引擎組成&#xff1b;瀏覽器內核編譯解析html代碼和css代碼&#xff0c;js引擎編譯解析JavaScript代碼&#xff1b;所以從本質上&#xff0c;瀏覽器只能識別運行JavaScript、CSS、HTML代碼。 而我們在…

敏捷開發最佳實踐:領導力維度實踐案例——走動式激勵

在本節實踐案例中&#xff0c;某財險公司信息技術部高級工程師分享了組織級數字化轉型中的優秀敏捷領導力實踐&#xff0c;不僅解決了產品上市周期長、響應市場變化慢的難題&#xff0c;還打破了部門墻、提升了客戶滿意度&#xff0c;該案例將為同類企業在組織層面進行有效敏捷…

Centos7配置靜態IP詳細步驟

使用Centos虛擬機測試時一到切換網段就頭疼&#xff0c;總是會有ping不通網關、同段IP和外網的情況。下面出一個盡可能完整的排查思路和配置靜態IP的過程。以下為配置nat模式后&#xff0c;出現以上情況的網絡不通的排查思路&#xff0c;并配置win10vm8靜態IP和centos7虛機nat模…

vue3路由切換過渡動畫實現

<router-view v-slot"{ Component }"><transition name"fade" mode"out-in" appear><keep-alive><component :is"Component" /></keep-alive></transition> </router-view>/* 路由切換動畫…

SQL字符集

目標:了解字符集的概念&#xff0c;掌握MySQL數據庫存儲數據的字符集邏輯以及設置方式 字符集概念 MySQL字符集關系 解決亂碼問題 字符集設置原理 1、字符集概念 目標:了解字符集概念&#xff0c;掌握字符集存儲和讀取的實現原理 概念 字符集:charset或者character set&am…

(十二)【Jmeter】線程(Threads(Users))之setUp 線程組

簡述 操作路徑如下: 作用:在正式測試開始前執行預加載或預熱操作,為測試做準備。配置:設置預加載或預熱操作的采樣器、循環次數等參數。使用場景:確保在正式測試開始前應用程序已經達到穩定狀態,減少測試結果的偏差。優點:提供預加載或預熱操作,確保測試的準確性。缺…

Centos開機網卡自啟動失敗

問題背景 每次都要手動啟動在這里插入代碼片 解決方案: 關閉 NetworkManager 服務 systemctl disable NetworkManager systemctl stop NetworkManager重啟就會發現網卡已經可以自動啟動了

2024幻獸帕魯游戲服務器租用價格表_一年和1個月報價明細

游戲服務器租用多少錢一年&#xff1f;1個月游戲服務器費用多少&#xff1f;阿里云4核16G10M游戲服務器26元1個月、149元半年&#xff0c;騰訊云4核16G游戲服務器32元、312元一年&#xff0c;華為云26元&#xff0c;京東云主機也是26元起&#xff0c;游戲服務器配置從4核16G、4…

代碼隨想錄算法刷題訓練營day22

代碼隨想錄算法刷題訓練營day22&#xff1a;LeetCode(236)二叉樹的最近公共祖先、LeetCode(235) 二叉搜索樹的最近公共祖先、LeetCode(701)二叉搜索樹中的插入操作、LeetCode(450)刪除二叉搜索樹中的節點 LeetCode(236)二叉樹的最近公共祖先 題目 代碼 /*** Definition for…