c 给定字符串中查找_面试 | 查找类算法精析
點擊上方藍字設為星標
每周一、三、五上午 8:30 準時推送
下面開始今天的學習~
前言
查找,是使用計算機處理問題時的一個最基本的任務,因此也是算法面試中非常常見的一類問題。很多算法問題的本質,就是要能夠高效使用查找。LeetCode 中有很多問題都會用到集合和字典(C++ 中為 set 和 map , Python 中為 set 和 dict) 這兩種數據結構,今天我們將會對 LeetCode 這類問題進行總結,所有代碼采用 Python 實現,并可以在 ?力扣(LeetCode)里 AC。
靈活選擇鍵值
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 。所有整數的范圍在 -228 到 228 - 1 之間,最終結果不會超過 231 - 1 。
例如:
解題思路
暴力解法,時間復雜度 O(n^4)
將 D 中的元素放入查找表,時間復雜度 O(n^3)
將 A + B 的每一種可能放入查找表,然后 兩重循環對在查找表中尋找是否存在 -(C[i] + D[i]),時間復雜度為 O(n^2)。兩數相加的和作為鍵值
我采用第三種方法實現
代碼實現
49. 字母異位詞分組
題目描述
給定一個字符串數組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。
示例:
說明:
所有輸入均為小寫字母。
不考慮答案輸出的順序。
解題思路
對字符串數組中每一個字符串進行排序,之后如果遇到相等的字符串,就說明該字符串對應的排序前的字符串是字母易位詞。找字母易位詞的過程用哈希表,每當出現一個新的字母易位詞,就往 ret 中添加一個 list,同時往哈希表中添加該字母易位詞,并將該字母易位詞在哈希表中的 value 值存成該 list 的索引值;出現哈希表中已經存在的字母易位詞,直接往對應索引的 list 中添加即可。排序后的字符串作為鍵值
代碼實現
447. 回旋鏢的數量
題目描述
給定平面上 n 對不同的點,“回旋鏢” 是由點表示的元組 (i, j, k),其中 i 和 j 之間的距離和 i 和 k 之間的距離相等(需要考慮元組的順序)。
找到所有回旋鏢的數量。你可以假設 n 最大為 500,所有點的坐標在閉區間 [-10000, 10000] 中。
示例:
解題思路
暴力解法:三重循環枚舉所有的可能性。 時間復雜度為:O(n^3)
使用查找表:觀察到 i 是一個 “樞紐”,對于每個點i,遍歷其余點到i的距離 對于每個樞紐 i,計算它到其它點j的距離,并將距離作為鍵存入字典 dict 中,value 為距離的個數。時間復雜度為:O(n^2)。?距離作為鍵值
代碼實現
149. 直線上最多的點數
題目描述
給定一個二維平面,平面上有 n 個點,求最多有多少個點在同一條直線上。
解題思路
兩點可以確定一條直線,那么選擇固定一個點,求其他點與固定點的斜率,如果斜率相同,那么斜率相同的點在同一條直線上。同時要考慮,斜率可能為無窮大,也有可能兩個點為同一個點。鍵值應該為:斜率。
代碼實現
查找表和滑動窗口
219. 存在重復元素 II
題目描述
給定一個整數數組和一個整數 k,判斷數組中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的絕對值最大為 k。
解題思路
結合使用滑動窗口和查找表,不斷查找當前滑動窗口內有沒有重復值。我們通過建立一個 record 查找表,表中存的是窗口中的數,另外我們要注意的是,當窗口的大小>k的時候,我們要移除 record 中最左邊的元素(保證我們窗口中有 <= k 個數)
代碼實現
220. 存在重復元素 III
題目描述
給定一個整數數組,判斷數組中是否有兩個不同的索引 i 和 j,使得 nums[i] 和 nums[j] 的差的絕對值最大為 t,并且 i 和 j 之間的差的絕對值最大為 ?。
解題思路
也是查找表與滑動窗口的思路:維持滑動窗的大小最大為 k,遍歷每一個元素 nums[i],在活動窗口中尋找 |one-nums[i]| < t,即窗口中的元素范圍為:[one-t…one+t] 之間
代碼實現
總結
我們知道在準備面試的時候,刷算法題是一種捷徑,特別是刷力扣,但是不能一味的刷題,我們需要總結和思考,對于一些相似的題目我們應該多想想他們的思想,其實很多題的解題思路都是相近的。
本文作者:軍旗
編輯&版式:霍霍
聲明:本文歸 “力扣” 版權所有,如需轉載請聯系。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的c 给定字符串中查找_面试 | 查找类算法精析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北京环球影城坐地铁几号线
- 下一篇: DNF结婚后可以改名吗