哈希表:其實需要哈希的地方都能找到map的身影

2021-02-19 代碼隨想錄

數組和set都靠邊站!

❞第454題.四數相加II

給定四個包含整數的數組列表 A , B , C , D ,計算有多少個元組 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。

為了使問題簡單化,所有的 A, B, C, D 具有相同的長度 N,且 0 ≤ N ≤ 500 。所有整數的範圍在 -2^28 到 2^28 - 1 之間,最終結果不會超過 2^31 - 1 。

「例如:」

輸入:A = [ 1, 2]B = [-2,-1]C = [-1, 2]D = [ 0, 2]

輸出:2

「解釋:」

兩個元組如下:

(0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0(1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0思路

本題咋眼一看好像和第18題. 四數之和,第15題.三數之和差不多,其實差很多。

「本題是使用哈希法的經典題目,而第18題. 四數之和,第15題.三數之和 並不合適使用哈希法」,因為三數之和和四數之和這兩道題目使用哈希法在不超時的情況下做到對結果去重是很困難的,很有多細節需要處理。

「而這道題目是四個獨立的數組,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考慮有重複的四個元素相加等於0的情況,所以相對於題目18. 四數之和,題目15.三數之和,還是簡單了不少!」

如果本題想難度升級:就是給出一個數組(而不是四個數組),在這裡找出四個元素相加等於0,答案中不可以包含重複的四元組,大家可以思考一下,後續的文章我也會講到的。

本題解題步驟:

首先定義 一個unordered_map,key放a和b兩數之和,value 放a和b兩數之和出現的次數。遍歷大A和大B數組,統計兩個數組元素之和,和出現的次數,放到map中。定義int變量count,用來統計a+b+c+d = 0 出現的次數。在遍歷大C和大D數組,找到如果 0-(c+d) 在map中出現過的話,就用count把map中key對應的value也就是出現次數統計出來。C++代碼
class Solution {
public:
    int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
        unordered_map<int, int> umap; //key:a+b的數值,value:a+b數值出現的次數
        // 遍歷大A和大B數組,統計兩個數組元素之和,和出現的次數,放到map中 
        for (int a : A) {
            for (int b : B) {
                umap[a + b]++;
            }
        }
        int count = 0; // 統計a+b+c+d = 0 出現的次數
        // 在遍歷大C和大D數組,找到如果 0-(c+d) 在map中出現過的話,就把map中key對應的value也就是出現次數統計出來。
        for (int c : C) {
            for (int d : D) {
                if (umap.find(0 - (c + d)) != umap.end()) {
                    count += umap[0 - (c + d)];
                }
            }
        }
        return count;
    }
};

歡迎在評論區留言討論!

我將算法學習相關的資料已經整理到了Github :https://github.com/youngyangyang04/leetcode-master,裡面還有leetcode刷題攻略、各個類型經典題目刷題順序、思維導圖看一看一定會有所收穫!

因為公眾號改版,時間線被打亂,一些精彩文章大家可能錯過了。如果感覺這裡的文章對你有幫助,趕緊給「代碼隨想錄」加一個星標吧,方便第一時間閱讀文章

每天8:35準時推送一道經典算法題目,助你輕鬆學習算法!

相關焦點

  • 從哈希函數、哈希衝突、開散列出發,一文告訴你哈希思想與哈希表構造到底是什麼!
    簡言之,就是設定某一固定函數(hashFunc),通過此函數來使插入元素的值與元素位置相對應,往後我們需要查找此元素時就可以通過此函數(hashFunc)找到該值。若想查找某一元素時,則只需要對查找元素進行哈希函數運算,得到其存放地址,就能找到該元素。
  • 哈希表:解決了兩數之和,那麼能解決三數之和麼?
    ❝用哈希表解決了兩數之和,那麼三數之和呢?❞第15題. 三數之和給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。
  • 人們常說的哈希(Hash)到底是什麼?
    了解過區塊鏈的朋友,一定聽過「哈希」這一詞彙,然而對哈希的概念又極其的模糊,那麼哈希是什麼呢?Hash一般被翻譯成「散列」,也可直接音譯為「哈希」,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列算法,變換成固定長度的輸出,該輸出就是散列值。
  • SHA-256、MD-5……哈希散列函數這些原理你懂了嗎?
    當用戶進行註冊時,我對密碼進行哈希散列處理,並將其存儲在資料庫中。當用戶登錄時,我只需再次對輸入的內容進行哈希散列處理,並比較兩個哈希值。由於特定的輸入始終會輸出相同的哈希值,所以該方法每次都可以成功驗證密碼。如果網站以純文本格式存儲密碼的話,則會出現巨大的安全漏洞。如果有人入侵該網站,那麼他將會能獲取所有的電子郵件和密碼,並可以嘗試在其他網站上使用這些信息進行登錄。
  • 機器學習時代的哈希算法,將如何更高效地索引數據
    在計算機中,被索引的信息全部都是以比特形式存在的數據,索引用於將這些數據映射到它們的地址資料庫是索引編制的典型用例。資料庫旨在保存大量信息,並且一般來說,我們希望高效地檢索這些信息。搜尋引擎的核心是對網際網路上可用信息的龐大索引,哈希表、二叉搜索樹、字典樹、B-樹和布隆過濾器都是索引的形式。
  • 10分鐘了解一致性哈希算法,全網(小區區域網)(建議收藏)
    很多同學應該都知道什麼是哈希函數,在後端面試和開發中會遇到「一致性哈希」,那麼什麼是一致性哈希呢?名字聽起來很厲害的樣子,其實原理並不複雜,這篇文章帶你徹底搞懂一致性哈希!進入主題前,先來一場緊張刺激的模擬面試吧。模擬面試面試官:看你簡歷上寫參與了一個大型項目,用到了分布式緩存集群,那你說說你們是怎麼做緩存負載均衡?
  • 什麼是一致性哈希算法
    2,衡量一致性哈希算法好處的四個標準①平衡性。平衡性是指哈希的結果能夠儘可能分布到所有的緩衝中去,這樣可以使得所有的緩衝空間都得到利用。②單調性。單調性是指如果已經有一些數據通過哈希分配到了相應的機器上,又有新的機器加入到系統中。哈希的結果應能夠保證原有已分配的內容可以被映射到原有的或者新的機器中去,而不會被映射到舊的機器集合中的其他機器上。
  • Comunion 區塊鏈深度學習系列|什麼是哈希
    1997年左右,SHA-0 家族開始全球性徵集算法,任何人有好的算法都可以提交。這其實是一個全球的算法競爭,其目的是收錄全球公認能最好的算法,以此擴充家族。隨著時間的推移,產生了 SHA-2,我們之前所說比特幣裡面使用的算法 SHA-256,就是隸屬於 SHA-2 家族裡面的算法。
  • AAAI 2018 | 從哈希到CNN:中科院自動化所提出高精度&低功耗訓練方法
    [1],揭示了哈希與二值權重的神經網絡之間的緊密關係,表明了網絡模型的參數二值化問題可以轉化為哈希學習問題,從而大幅提高了二值化深度神經網絡模型的性能,使其能在資源受限場景下能兼顧性能和功耗。由於乘法運算比加法運算需要更多的硬體資源和計算周期,使用加法運算替代乘法運算能夠實現網絡加速的目的。另一方面,原始網絡參數的存儲格式是 32 位浮點數,二值參數網絡只使用 1 位來表示+1 或者-1, 達到了 32 倍的壓縮目的。但是將參數從 32 位量化到 1 位會導致較大的量化損失,當前的二值網絡訓練方法往往會導致較大的網絡精度下降,如何學習二值的網絡參數同時又不帶來較大的精度下降是一個問題。
  • Java基礎-今日內容介紹(collection、map集合框架、可變參數
    並發修改異常Set集合知識點:Set接口,特點不重複元素,沒索引,Set接口的實現類:HashSet (哈希表),特點: 無序集合,存儲和取出的順序不同,沒有索引,不存儲重複元素,代碼的編寫上,和ArrayList完全一致,hashset底層就是hashmap 默認16 個元素。
  • 哈達瑪矩陣指導下的在線哈希學習新方法
    而視覺哈希編碼技術逐漸成為實現相似性檢索的有效途徑。近日,廈門大學紀榮嶸關於在線哈希學習新方法的論文被發表在 IJCV 上,在論文中紀教授引入哈達瑪矩陣指導哈希函數的學習,即吸取了傳統在線哈希方法的優點,也最大程度上降低了精度損失。另外,對比當前最先進的七種技術,引入哈達瑪矩陣的在線哈希學習都有一定程度的性能提高。
  • 一口氣講透一致性哈希(Hash),助力「碼農變身」
    如今雲計算、大數據、物聯網、AI的興起,使得分布系統得到了前所未有的廣泛應用,然而由於分布式系統具有極高的複雜度,帶來了許多難題,一致性哈希就是為了解決分布式難題之一應運而生的,本篇主要圖示講解一致性哈希的原理及其應用,助力碼農變身。
  • 哈希水質分析,為上海10萬人口率先喝上高品質直飲水嚴把質量關
    此前上海市出臺的全國首部水質地方標準《上海市生活飲用水水質標準》曾對供水的各項常規指標進行了明確規定。作為全國第一部生活飲用水水質地方標準,上海地標在現有國家標準基礎上,向國際一流標準看齊,新增6項非常規指標,包括氨氮限值,控制在加氨化合氯時的加氨量。此次高品質飲用水示範項目則在原有常規指標上進行了更高的提標。
  • 哈希公司新品發布——Eclox TM可攜式水質毒性分析儀
    為滿足環保、衛生疾控以及自來水行業近年來,尤其是自5.12地震以來,日益增強的對可攜式毒性測試儀的需求,美國哈希公司在EcloTM x化學發光法可攜式水質毒性分析儀基礎上
  • 她任教山東大學,後被清華聘請,破解國際通用哈希函數而出名
    在中國有一位這樣女教授,她破解了世界上著名的通用哈希函數,就好比一個人赤手空拳,在一天之內造出一架飛機飛上天!讓我們來一起了解王小雲教授吧。1966年,王小雲出生在山東省的諸城。於是王小雲從當時最安全,也是全世界最通用的哈希函數開始研究起。當時的她也沒有很大的想法說非要幹出個什麼來。結果後來破解了被許多專家聲稱不可破解的哈希函數。那麼我們來了解一下哈希函數是如何運行的。MD5和SHA-1這兩個函數是一種加密的哈希函數,而且兩者的返回值永遠是固定的。
  • 哈希算法、愛因斯坦求和約定,這是2020年的注意力機制
    哈希算法、Head 之間的信息交流都需要考慮,顯存佔用、表徵能力都不能忽視。注意力機制是非常優美而神奇的機制,在神經網絡「信息過載」的今天,讓 NN 學會只關注特定的部分,無疑會大幅度提升任務的效果與效率。藉助注意力機制,神經機器翻譯、預訓練語言模型等任務獲得了前所未有的提升。
  • 「新」動時刻, 讓你心中的哈希最強新品C位出道
    過去一年裡,哈希研發團隊也不斷推陳出新,為用戶們帶來多款新品儀器、試劑及解決方案。一同觀看哈希新產品們如何在舞臺上綻放光彩,最為重要的是作為評委的您,會為哪位學員轉身?為TA投出您關鍵一票,讓你pick的新品C位出道,更有機會贏得精彩好禮!
  • 哈希可攜式水質分析儀器為重慶三峽庫區首艘水質監測船保駕護航
    重慶環保局選用哈希可攜式水質分析儀器系列用於庫區江面採樣和應急水質分析。哈希可攜式水質分析儀器系列不僅適用於野外各種環境的水質測試要求,也適用於突發事件的快速水質檢測及實驗室內常規水參數的測量,使用戶以較小的投入就可滿足水質測試的需求。