(七)数据结构之“字典”
數(shù)據(jù)結(jié)構(gòu)之“字典”
- 字典是什么?
- LeetCode:349.兩個數(shù)組的交集
- LeetCode:20.有效的括號
- LeetCode:1.兩數(shù)之和
- LeetCode:3.無重復字符的最長子串
- LeetCode:76.最小覆蓋子串
- 思考題
字典是什么?
與集合類似,字典也是一種存儲唯一值的數(shù)據(jù)結(jié)構(gòu),但它是以鍵值對的形式來存儲
ES6中有字典,名為Map
字典的常用操作:鍵值對的增刪改查
LeetCode:349.兩個數(shù)組的交集
輸入:nums1 = [1,2,2,1],nums = [2,2]
輸出:[2]
解題思路
求nums1和nums2都有的值
用字典建立一個映射關(guān)系,記錄nums1里有的值
遍歷nums2,找出nums1里也有的值
解題步驟
新建一個字典,遍歷nums1,填充字典
遍歷nums2,遇到字典里的值就選出,并從字典中刪除
時間復雜度O(m+n),空間復雜度O(m)
LeetCode:20.有效的括號
時間復雜度O(n),空間復雜度O(n)
LeetCode:1.兩數(shù)之和
給定nums = [2,7,11,15],target = 9
因為nums[0] + nums[1] = 2 + 7 = 9
所以返回[0,1]
解題思路
把nums想象成相親者
把target想象成匹配條件
用字典建立一個婚姻介紹所,存儲相親者的數(shù)字和下標
解題步驟
新建一個字典作為婚姻介紹所
nums里的值,逐個來介紹所找對象,沒有合適的就先登記著,有合適的就牽手成功
時間復雜度O(n),空間復雜度O(n),空間復雜度可以做得更好,可以時間換空間
LeetCode:3.無重復字符的最長子串
解題思路
先找出所有的不包含重復字符的子串
找出長度最大那個子串,返回其長度即可
解題步驟
用雙指針維護一個滑動窗口,用來剪切子串
不斷移動右指針,遇到重復字符,就把左指針移動到重復字符的下一位
過程中,記錄所有窗口的長度,并返回最大值
時間復雜度O(n),空間復雜度:O(m),m是字符串中不重復字符的個數(shù)
LeetCode:76.最小覆蓋子串
解題思路
先找出所有包含T的子串
找出長度最小那個子串,返回即可
解題步驟
用雙指針維護一個滑動窗口
移動右指針,找到包含T的子串,移動左指針,盡量減少包含T的子串的長度
循環(huán)上述過程,找出包含T的最小子串
時間復雜度:O(m+n),m是t的長度,n是s的長度
空間復雜度:O(m),m是t里不同字符的個數(shù)
思考題
1、在你的實際工作中使用字典完成一次映射操作
2、請用 Chrome 的 Profile 工具或其他任意前端性能測試工具,測試 Map 和 Object 頻繁增刪操作的性能,誰高誰低?
總結(jié)
以上是生活随笔為你收集整理的(七)数据结构之“字典”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6226开头是什么银行
- 下一篇: 护患沟通的六大原则