【Leetcode每日一刷】哈希表|綱領、242.有效的字母異位詞、349. 兩個數組的交集

綱領

🔗代碼隨想錄理論部分
關于哈希表這個數據結構就不再重復講了,下面對幾個關鍵點記錄一下:

  • 哈希碰撞
    解決方法1:拉鏈法
    解決方法2:線性探測法

下面針對做題要用到的三種結構講一下(也是重復造輪子了算是)

常見的三種哈希結構

當我們想使用哈希法來解決問題的時候,我們一般會選擇如下三種數據結構。

  • 數組
  • set (集合)(元素不能重復)
  • map(映射)

在這里插入圖片描述
unordered_set在C++11的時候被引入標準庫了,而hash_set并沒有,所以建議還是使用unordered_set比較好,這就好比一個是官方認證的,hash_set,hash_map 是C++11標準之前民間高手自發造的輪子。

在這里插入圖片描述

?🦄總結一下,當我們遇到了要快速判斷一個元素是否出現集合里的時候,就要考慮哈希法。

但是哈希法也是犧牲了空間換取了時間,因為我們要使用額外的數組,set或者是map來存放數據,才能實現快速的查找。

如果在做面試題目的時候遇到需要判斷一個元素是否出現過的場景也應該第一時間想到哈希法!

242.有效的字母異位詞

力扣題目鏈接

在這里插入圖片描述

🦄解題思路:

這題很容易看出來是個哈希,把26個字母映射到26長度的數組中,數組中的值表示元素出現的個數。遍歷完兩個字符串完成哈希后,再把兩個字符串的哈希數組進行比較是否一樣即可。

?正確代碼:

class Solution {
public:bool isAnagram(string s, string t) {int a[26] = {0};int b[26] = {0};for(int i = 0; i < s.size(); i++) a[s[i] -'a'] ++ ;for(int i = 0; i < t.size(); i++) b[t[i] -'a'] ++ ;for(int i = 0; i < 26 ;i ++){if (a[i] != b[i]) return false;}return true;}
};

349. 兩個數組的交集

題目鏈接
在這里插入圖片描述

🦄解題思路:

這題當然也是哈希,但是在數據結構上再用數組就不太合適了;因為key比較分散,稀疏,使用數組用作哈希表浪費空間。這里使用數據結構:set

此時就要使用另一種結構體了,set ,關于set,C++ 給提供了如下三種可用的數據結構:

  • std::set
  • std::multiset
  • std::unordered_set

std::set和std::multiset底層實現都是紅黑樹,std::unordered_set的底層實現是哈希表, 使用unordered_set 讀寫效率是最高的,并不需要對數據進行排序,而且還不要讓數據重復,所以選擇unordered_set

在這里插入圖片描述
?正確代碼:

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> result_set; // 存放結果,之所以用set是為了給結果集去重int hash[1005] = {0}; // 默認數值為0for (int num : nums1) { // nums1中出現的字母在hash數組中做記錄hash[num] = 1;}for (int num : nums2) { // nums2中出現話,result記錄if (hash[num] == 1) {result_set.insert(num);}}return vector<int>(result_set.begin(), result_set.end());}
};

其實呢,Nums1哈布哈希無所謂,只要在nums1中發現nums2元素,則加進不可重復的set即

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> result_set; // 存放結果,之所以用set是為了給結果集去重unordered_set<int> nums_set(nums1.begin(), nums1.end());for (int num : nums2) {// 發現nums2的元素 在nums_set里又出現過vector<int>::iterator it = find(nums1.begin(), nums1.end(), num);if (it != nums1.end()) {result_set.insert(num);}}return vector<int>(result_set.begin(), result_set.end());}
};

補充

那有同學可能問了,遇到哈希問題我直接都用set不就得了,用什么數組啊。

直接使用set 不僅占用空間比數組大,而且速度要比數組慢,set把數值映射到key上都要做hash計算的。

不要小瞧 這個耗時,在數據量大的情況,差距是很明顯的。

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

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

相關文章

vue.config.js publicPath 和 vue-router base 結合配置項目根目錄為二級目錄案例

背景: 同個域名下需要有 PC 管理后臺, H5 端, 企業微信 ......等多個端, 需要在一個域名下通過不同的路徑來區分不同的項目; 例如: abc.com/pc, abc.com/h5, abc.com/wx-work.... 此處做個記錄 步驟: 1. 修改 vue.config.js 中的 publicPath module.exports {outputDir:…

MATLAB|【免費】概率神經網絡的分類預測--基于PNN的變壓器故障診斷

目錄 主要內容 部分代碼 結果一覽 下載鏈接 主要內容 ?《MATLAB神經網絡43個案例分析》共有43章&#xff0c;內容涵蓋常見的神經網絡&#xff08;BP、RBF、SOM、Hopfield、Elman、LVQ、Kohonen、GRNN、NARX等&#xff09;以及相關智能算法&#xff08;SVM、決策…

Java 下載excel文件

一、背景 微信小程序需要導出excel文件&#xff0c;后端技術Java&#xff0c;前端使用uniapp框架&#xff0c;使用excel模板。 二、excel 報表模板 需要補充的內容是以下標記問號的&#xff0c;其中有個表格&#xff0c;內容是動態添加的 三、Java端代碼實現 關鍵步驟&…

Topaz Video AI:一鍵提升視頻品質,智能重塑影像魅力 mac/win版

Topaz Video AI是一款革命性的視頻智能處理軟件&#xff0c;它利用先進的機器學習和人工智能技術&#xff0c;為視頻創作者提供了前所未有的視頻增強和修復功能。無論您是專業視頻編輯師、攝影師&#xff0c;還是熱愛視頻創作的愛好者&#xff0c;Topaz Video AI都能幫助您輕松…

webpack打包效率優化,webpack打包體積優化

優化 webpack 打包效率的方法 使用增量構建和熱更新&#xff1a;在開發環境下&#xff0c;使用增量構建和熱更新功能&#xff0c;只重新構建修改過的模塊&#xff0c;減少整體構建時間。避免無意義的工作&#xff1a;在開發環境中&#xff0c;避免執行無意義的工作&#xff0c…

2403C++,C++20協程庫

原文 基于C20協程的http庫--cinatra cinatra是基于C20無棧協程實現的跨平臺,僅頭,高性能,易用的http/https庫(http1.1),包括httpserver和httpclient,功能完備,不僅支持最普通的getpost等請求,還支持restfulapi,websocket,chunked,ranges,multipart,靜態文件服務和反向代理等功…

Python程序的流程

歸納編程學習的感悟&#xff0c; 記錄奮斗路上的點滴&#xff0c; 希望能幫到一樣刻苦的你&#xff01; 如有不足歡迎指正&#xff01; 共同學習交流&#xff01; &#x1f30e;歡迎各位→點贊 &#x1f44d; 收藏? 留言?&#x1f4dd; 年輕是我們唯一擁有權利去編制夢想的時…

【前端素材】推薦優質后臺管理系統Annex平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理網站、應用程序或系統的管理界面&#xff0c;通常由管理員和工作人員使用。它提供了訪問和控制網站或應用程序后臺功能的工具和界面&#xff0c;使其能夠管理用戶、內容、數據和其他各種功能。 2、功能需求 后臺管理系…

利用python爬取本站的所有博客鏈接

目錄 前因 首先的嘗試 解決辦法 導入包 定義一個json配置文件 打開瀏覽器執行操作 注意 提取源代碼并且進行篩選鏈接 執行結果 前因 由于自己要把csdn的博客同步到hugo中&#xff0c;把博客轉為md格式已經搞好了&#xff0c;但是由于csdn的圖片具有防盜鏈&#xff0c;…

vue實現商品評分效果(通過插件實現)

Vue.js 實現了一個簡單的商品評分功能。用戶可以通過點擊星星來修改商品的評分&#xff0c;并且評分顯示了相應的星星數。 廢話不多說&#xff0c;直接上代碼 方法一&#xff1a; <template><div><avue-form :model"formData"><avue-form-it…

2024年經典【自動化面試題】附答案

一、請描述一下自動化測試流程&#xff1f; 自動化測試流程一般可以分為以下七步&#xff1a; 編寫自動化測試計劃&#xff1b; 設計自動化測試用例&#xff1b; 編寫自動化測試框架和腳本&#xff1b; 調試并維護腳本&#xff1b; 無人值守測試&#xff1b; 后期腳本維…

【數據結構】深入探討二叉樹的遍歷和分治思想(一)

&#x1f6a9;紙上得來終覺淺&#xff0c; 絕知此事要躬行。 &#x1f31f;主頁&#xff1a;June-Frost &#x1f680;專欄&#xff1a;數據結構 &#x1f525;該文章主要講述二叉樹的遞歸結構及分治算法的思想。 目錄&#xff1a; &#x1f30d;前言&#xff1a;&#x1f30d;…

Sora 原理與技術實戰筆記一

b 站視頻合集 【AIX組隊學習】Sora原理與技術實戰&#xff1a;Sora技術路徑詳解 Sora 技術報告&#xff08;OpenAI&#xff09; huggingsd 文生圖視頻系列的一個開源項目 最強視頻生成模型Sora相關技術解析 https://github.com/lichao-sun/SoraReview 驚艷效果&#xff1a; 長…

【Linux】screen

文章目錄 一、screen二、功能三、使用3.1 安裝3.2 常用參數3.3 狀態3.4 使用3.4.1 終端列表3.4.2 新建screen3.4.3 detached3.4.4 回到終端3.4.5 清除終端 一、screen screen為多視窗管理程序。在服務器上搭建一些服務的時候&#xff0c;經常要用到screen命令。例如某些服務開…

云吶智能運維包含哪些內容?運維未來的發展方向是什么?

智能運維&#xff08;AIOps&#xff09;是一種使用人工智能應用程序來調節IT操作和維護的實踐方式。它結合了大數據和機器學習技術&#xff0c;旨在自動化和改進IT操作和維護任務&#xff0c;如故障檢測、因果分析和自動故障修復。以下是智能操作和維護的具體內容、挑戰和解決方…

使用Node.js構建一個簡單的聊天機器人

當談到人工智能&#xff0c;我們往往會想到什么&#xff1f;是智能語音助手、自動回復機器人等。在前端開發領域中&#xff0c;我們也可以利用Node.js來構建一個簡單而有趣的聊天機器人。本文將帶你一步步實現一個基于Node.js的聊天機器人&#xff0c;并了解其工作原理。 首先…

文生圖項目總結

文生圖 功能點 頁面進來獲取背景圖url和圖片寬高&#xff08;根據比例和手機屏幕處理過的寬高&#xff09;渲染圖片&#xff08;背景圖最后生成圖片模糊&#xff0c;換成img展示解決&#xff09;添加多個文字&#xff0c;編輯文字內容&#xff0c;拖拽改變文字位置&#xff0c…

上云還是下云,最大挑戰是什么?| 對話章文嵩、畢玄、王小瑞

近半年來&#xff0c;公有云領域頻頻發生阿里云、滴滴等平臺崩潰事件&#xff0c;與此同時&#xff0c;馬斯克的“X 下云省錢”言論引起了廣泛關注&#xff0c;一時間&#xff0c;“上云”和“下云”成為熱議話題。在最近舉辦的 AutoMQ 云原生創新論壇上&#xff0c;AutoMQ 聯合…

大數據可視化python01

import pandas as pd import matplotlib.pyplot as plt# 設置中文改寫字體 plt.rcParams[font.sans-serif] [SimHei]# 讀取數據 data pd.read_csv(C:/Users/wzf/Desktop/讀取數據進行數據可視化練習/實訓作業練習/瓜果類單位面積產量.csv ,encoding utf-8)#輸出 print(data)…

springcloud alibaba組件簡介

一、Nacos 服務注冊中心/統一配置中心 1、介紹 Nacos是一個配置中心&#xff0c;也是一個服務注冊與發現中心。 1.1、配置中心的好處&#xff1a; &#xff08;1&#xff09;配置數據脫敏 &#xff08;2&#xff09;防止出錯&#xff0c;方便管理 &#xff08;3&#xff…