国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解

這篇具有很好參考價值的文章主要介紹了java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法?

目錄

1、HashMap的基本方法

1.1、基礎方法(增刪改查)

1.2、其他方法?

2、HashMap的相關例題

2.1、題目介紹

2.2、解題

2.2.1、解題思路

2.2.2、解題圖解

2.3、解題代碼
java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法

1、HashMap的基本方法

HashMap 是一個散列表,它存儲的內容是鍵值(key-value)映射。
HashMap 的 key 與 value 類型可以相同也可以不同,根據(jù)定義,不受限制。

1.1、基礎方法(增刪改查)

1.定義一個哈希表

HashMap<Integer, String> hashmap= new HashMap<Integer, String>();

2.添加鍵值對(key-value)(增)

hashmap.put(1, "string1"); // 執(zhí)行完后hash表內為{1=string1}
hashmap.put(2, "string2"); // 執(zhí)行完后hash表內為{1=string1, 2=string2}
hashmap.put(2, "string2"); // 執(zhí)行完后hash表內為{1=string1, 2=string2, 3=string3}

3.根據(jù)key值訪問value(查)

hashmap.get(1); // 返回string1
hashmap.get(2); // 返回string2
hashmap.get(3); // 返回string3

4.根據(jù)key值刪除元素(刪)

hashmap.remove(1); // 執(zhí)行完后hash表內為{2=string2, 3=string3}
hashmap.remove(2); // 執(zhí)行完后hash表內為{3=string3}
hashmap.remove(3); // 執(zhí)行完后hash表內為{}
// 刪除所有鍵值對
hashmap.clear();

5.替換 hashMap 中是指定的key對應的 value(改)

hashmap.replace(key,value); // 返回0

6.返回hashmap中鍵值對的數(shù)量

hashmap.size(); // 返回0

7.getOrDefault(Object key, V defaultValue)
此方法用于當Map集合中有這個key時,就使用這個key對應的value值,如果沒有就使用默認值defaultValue;

hashmap.getOrDefault(key,defaultValue);

1.2、其他方法?

1.檢查hashMap中是否存在指定的key對應的映射關系

hashmap.containsKey(key);?

2.檢查hashMap中是否存在指定的value對應的映射關系

hashmap.containsValue(value);?

3.hashmap是否為空

hashmap.isEmpty();?

4.HashMap.values() 方法

hashmap.values(); // 返回所有Value值組成的集合

例如:
?如果有HashMap: {1=Google, 2=Runoob, 3=Taobao}
?則返回Values: [Google, Runoob, Taobao]

2、HashMap的相關例題

2.1、題目介紹

原題鏈接:128. 最長連續(xù)序列 - 力扣(LeetCode)

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法?

示例 1:

輸入:nums = [100,4,200,1,3,2]
輸出:4
解釋:最長數(shù)字連續(xù)序列是[1, 2, 3, 4]。它的長度為 4。

示例 2:

輸入:nums = [0,3,7,2,5,8,4,6,0,1]
輸出:9

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

2.2、解題

2.2.1、解題思路

使用一個HashMap存儲當前遍歷過的數(shù)字,如果hashMap中已經存在這個數(shù)字,說明之前已經處理過這個數(shù)字,不做任何處理【是為了防止出現(xiàn)重復數(shù)字再次計算造成錯誤】
每次遍歷到新數(shù)字時,去hashMap中尋找比它小1的數(shù)字和比它大1的數(shù)字對應的長度,記為min和max。
如果min、max均為0,說明此時不存在上下界,直接記為1.
當出現(xiàn)min、max不為0時,說明與當前數(shù)字有新的上下界,計算出上下界所對應的數(shù)字,并在map中修改對應的上下界大小。?

若不存在上下界:直接更新為1;
若存在上界不存在下界:更新上界數(shù)字長度+1,即max + 1;
若存在下界不存在上界:更新下界數(shù)字長度+1,即min + 1;
若上下界均存在:同時更新上下界長度為下界長度+上界長度+1,即min + max + 1

2.2.2、解題圖解

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法

數(shù)組nums從i=0開始遍歷,has為哈希表,result用來保存最后的結果,min用來保存鍵值(key)為 nums[?i-1 ] 在哈希表中所對應的值(value)?;max用來保存鍵值(key)為 nums[?i+1 ] 在哈希表中所對應的值(value) ,now保存當前循環(huán)最長連續(xù)序列的結果用于和result進行比較?

?java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法

當前的 i = 0 ,nums[ i ] = 100,???has 中沒有 key 為 100 的項,所以讓 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中沒有 key 為 99(nums[i]-1) 的項, 所以?min = 0 ;由于 has 中沒有 key 為 101(nums[i]+1) 的項, 所以 max = 0 ;因此 now = 1 ;然后在 has 中添加 key = 100,value = 1 的項;result 小于 now,所以讓 result = now = 1

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法

當前的 i = 1?,nums[ i ] = 4,???has 中沒有 key 為 4?的項,所以讓 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中沒有 key 為 3(nums[i]-1) 的項, 所以?min = 0 ;由于 has 中沒有 key 為 5(nums[i]+1) 的項, 所以 max = 0 ;因此 now = 1 ;然后在 has 中添加 key = 4,value = 1 的項;result 等于?now,所以?result 不變

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法

當前的 i = 2?,nums[ i ] = 200,???has 中沒有 key 為 200 的項,所以讓 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中沒有 key 為 199(nums[i]-1) 的項, 所以?min = 0 ;由于 has 中沒有 key 為 201(nums[i]+1) 的項, 所以 max = 0 ;因此 now = 1 ;然后在 has 中添加 key = 200,value = 1 的項;result 等于?now,所以?result 不變

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法

當前的 i = 3?,nums[ i ] = 1,???has 中沒有 key 為 1?的項,所以讓 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中沒有 key 為 0(nums[i]-1) 的項, 所以?min = 0 ;由于 has 中沒有 key 為 2(nums[i]+1) 的項, 所以 max = 0 ;因此 now = 1 ;然后在 has 中添加 key = 1,value = 1 的項;result 等于?now,所以?result 不變

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法

當前的 i = 4?,nums[ i ] = 3,???has 中沒有 key 為 3?的項,所以讓 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中沒有 key 為 2(nums[i]-1) 的項, 所以?min = 0 ;由于 has 中有 key 為 4(nums[i]+1) 的項, 所以 max = 1?;因此 now = 2?;然后在 has 中添加 key = 3,value = 2?的項,添加 key = 3 + 1, value = 2 的項(has.put(nums[i]+max, now));result 小于 now,所以讓 result = now = 2

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法

當前的 i = 5?,nums[ i ] = 2,???has 中沒有 key 為 2?的項,所以讓 min = has.getOrDefault(nums[i]-1, 0);max = has.getOrDefault(nums[i]+1, 0);由于 has 中有 key 為 1(nums[i]-1) 的項, 所以?min = 1?;由于 has 中有 key 為 3(nums[i]+1) 的項, 所以 max = 2?;因此 now = 4?;然后在 has 中添加 key = 2,value = 4?的項,添加?key = 2?+ 1, value = 4?的項(has.put(nums[i]+max, now)),添加 key = 2?-?1, value = 4?的項(has.put(nums[i]-min, now));result 小于 now,所以讓 result = now = 4

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法?

最后返回 result?,result 等于 4

2.3、解題代碼

class Solution {
    public int longestConsecutive(int[] nums) {
        HashMap<Integer, Integer> has = new HashMap<>();
        int result = 0;
        for (int i=0; i<nums.length; i++){
            if (has.get(nums[i]) != null){
                continue;
            }
            int min = has.getOrDefault(nums[i]-1, 0);
            int max = has.getOrDefault(nums[i]+1, 0);
            int now = min + max + 1;
            if (min == 0 && max == 0){
                has.put(nums[i], now);
            } else if (min == 0){
                has.put(nums[i]+max, now);
                has.put(nums[i], now);
            } else if (max == 0){
                has.put(nums[i], now);
                has.put(nums[i]-min, now);
            } else{
                has.put(nums[i]+max, now);
                has.put(nums[i], 1);
                has.put(nums[i]-min, now);
            }
            result = Math.max(result,now);
        }
        return result;
    }
}

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法

?

  • 時間復雜度: O(n)

  • 空間復雜度: O(n)

?

【LeetCode力扣】相關:

【LeetCode力扣】42.接雨水(困難)-CSDN博客https://blog.csdn.net/m0_65277261/article/details/134291521?spm=1001.2014.3001.5502【LeetCode力扣】287.尋找重復數(shù)(中等)-CSDN博客https://blog.csdn.net/m0_65277261/article/details/134232926?spm=1001.2014.3001.5502【LeetCode力扣】11. 盛最多水的容器 (中等)-CSDN博客https://blog.csdn.net/m0_65277261/article/details/134102596?spm=1001.2014.3001.5502

java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解,數(shù)據(jù)結構,java,散列表,哈希算法文章來源地址http://www.zghlxwxcb.cn/news/detail-753764.html

到了這里,關于java數(shù)據(jù)結構(哈希表—HashMap)含LeetCode例題講解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • java八股文面試[數(shù)據(jù)結構]——HashMap擴容優(yōu)化

    java八股文面試[數(shù)據(jù)結構]——HashMap擴容優(yōu)化

    ? ? ?知識來源: 【2023年面試】HashMap在擴容上做了哪些優(yōu)化_嗶哩嗶哩_bilibili ?

    2024年02月11日
    瀏覽(33)
  • Java-數(shù)據(jù)結構(二)-Map:HashMap、TreeMap、LinkedHashMap

    Java-數(shù)據(jù)結構(二)-Map:HashMap、TreeMap、LinkedHashMap

    ????Map是Java中常用的數(shù)據(jù)結構,它提供了一種鍵值對的存儲方式,可以根據(jù)鍵來快速訪問值。在本篇文章中,我將學習Java中的Map數(shù)據(jù)結構 ????問題是最好的老師,我將從至少以下幾個方面闡述,什么是map、使用Map有什么好處、Map的底層原理、map中的key和value分別是

    2024年02月06日
    瀏覽(70)
  • Java實現(xiàn)數(shù)據(jù)結構哈希表

    Java實現(xiàn)數(shù)據(jù)結構哈希表

    概述 給美分數(shù)據(jù)分配一個編號,放入表格(數(shù)組) 建立編號與表格索引的關系,將來就可以通過編號快速查找數(shù)據(jù) 理想情況編號當唯一,數(shù)組能容納所有數(shù)據(jù) 現(xiàn)實是不能說為了容納所有數(shù)據(jù)造一個超大數(shù)組,編號也可能重復 解決 有限長度的數(shù)組,以[拉鏈]方式存儲數(shù)據(jù) 允許編號適當

    2024年02月21日
    瀏覽(25)
  • 【數(shù)據(jù)結構】用Java實現(xiàn)哈希表

    【數(shù)據(jù)結構】用Java實現(xiàn)哈希表

    目錄 1 概念 2 沖突-概念 3 沖突-避免 4 沖突-避免-哈希函數(shù)設計 (1)直接定制法--(常用) (2)除留余數(shù)法--(常用) (3)平方取中法--(了解) (4)折疊法--(了解) (5)隨機數(shù)法--(了解) (6)數(shù)學分析法--(了解) 5?沖突-避免-負載因子調節(jié)(重點掌握) 6 沖突-解決 (1)沖突-解決

    2023年04月11日
    瀏覽(43)
  • 【數(shù)據(jù)結構】 | java中 哈希表及其沖突解決

    【數(shù)據(jù)結構】 | java中 哈希表及其沖突解決

    ??? 博客新人,希望大家一起加油進步 ??? 乾坤未定,你我皆黑馬 1、哈希表概念 順序結構以及平衡樹中 ,元素關鍵碼與其存儲位置之間沒有對應的關系,因此在 查找一個元素時,必須要經過關鍵碼的多次比較。順序查找時間復雜度為O(N),平衡樹中為樹的高度,即O(Lo

    2024年01月19日
    瀏覽(23)
  • 【Java數(shù)據(jù)結構】順序表、隊列、棧、鏈表、哈希表

    【Java數(shù)據(jù)結構】順序表、隊列、棧、鏈表、哈希表

    是一個有類型參數(shù)(type parameter)的范型表(generic class) 能夠自動調整容量,并且不需要寫額外的代碼 存放數(shù)據(jù)使用數(shù)組但是可以編寫一些額外的操作來強化為線性表,底層依然采用順序存儲實現(xiàn)的線性表,稱為順序表 創(chuàng)建 常見操作 一旦確認數(shù)組列表大小恒定,不再發(fā)生

    2024年02月02日
    瀏覽(22)
  • 【Java程序員面試專欄 數(shù)據(jù)結構】四 高頻面試算法題:哈希表

    【Java程序員面試專欄 數(shù)據(jù)結構】四 高頻面試算法題:哈希表

    一輪的算法訓練完成后,對相關的題目有了一個初步理解了,接下來進行專題訓練,以下這些題目就是匯總的高頻題目,一個O(1)查找的利器哈希表,所以放到一篇Blog中集中練習 題目 解題思路 時間 空間 兩數(shù)之和 輔助哈希 使用map存儲出現(xiàn)過的值,key為值大小,v

    2024年02月22日
    瀏覽(29)
  • Java學數(shù)據(jù)結構(4)——散列表Hash table & 散列函數(shù) & 哈希沖突

    Java學數(shù)據(jù)結構(4)——散列表Hash table & 散列函數(shù) & 哈希沖突

    1.散列表,key,散列函數(shù); 2.哈希沖突的解決; 3.string中的hashCode; 查找樹ADT,它允許對元素的集合進行各種操作。本章討論散列表(hash table)ADT,不過它只支持二叉查找樹所允許的一部分操作。散列表的實現(xiàn)常常叫作散列(hashing)。散列是一種用于以常數(shù)平均時間執(zhí)行插入、刪除和

    2024年02月10日
    瀏覽(30)
  • 【JavaSE專欄53】Java集合類HashMap解析,基于哈希表的鍵值對存儲結構

    【JavaSE專欄53】Java集合類HashMap解析,基于哈希表的鍵值對存儲結構

    作者主頁 :Designer 小鄭 作者簡介 :3年JAVA全棧開發(fā)經驗,專注JAVA技術、系統(tǒng)定制、遠程指導,致力于企業(yè)數(shù)字化轉型,CSDN學院、藍橋云課認證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了 Java 中集合類 HashMap 的語法、使用說明和應用場景,并給出了樣例代碼。

    2024年02月15日
    瀏覽(24)
  • 《HashMap的數(shù)據(jù)結構》

    《HashMap的數(shù)據(jù)結構》

    目錄 HashMap概述: ?數(shù)據(jù)結構的組成: 一個鍵值對是如何存入該結構中: HashMap中鏈表和紅黑樹的用途和轉換方式?: ? ???????? ? ? ? ? ?HashMap是基于哈希表的Map接口實現(xiàn)的,它存儲的內容是鍵值對key,value映射。 該類無序。 ? ? ? ? 在JDK1.7及以前,HashMap的數(shù)據(jù)結構是有

    2024年02月07日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包