日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c 给定字符串中查找_面试 | 查找类算法精析

發布時間:2023/12/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 给定字符串中查找_面试 | 查找类算法精析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。