leetcode題解 查詢表問題

2021-09-11 12:05:30 字數 4154 閱讀 1402

查詢,是使用計算機處理問題時的乙個最基本的任務,因此也是面試中非常常見的一類問題。很多演算法問題的本質,就是要能夠高效查詢。學會使用系統庫中的map和set,就已經成功了一半。

// 349. intersection of two arrays

// 時間複雜度:o(nlogn)

// 空間複雜度:o(n)

class

solution

};改寫程式:

// 349. intersection of two arrays

class

solution

};複製**

// 350. intersection of two arrays ii

// 時間複雜度:o(nlogn)

// 空間複雜度:o(n)

class

solution

return resultvector;}};

複製**

思考

雜湊表不管查詢、插入、刪除都是o(1)的時間複雜度。

#include

using

namespace

std;

// 349. intersection of two arrays

// 時間複雜度:o(n)

// 空間複雜度:o(n)

class

solution

};//改寫過使用hash表實現底層的unorder_map

#include

using

namespace

std;

/// 350. intersection of two arrays ii

// 時間複雜度:o(n)

// 空間複雜度:o(n)

class

solution

// o(n)

return resultvector;}};

複製**

anagram:乙個字串中的字母調整順序後與原字串一致。

1^2 + 9^2 = 82

8^2 + 2^2 = 68

6^2 + 8^2 = 100

複製**

給出乙個模式(pattern)以及乙個字串,判斷這個字串是否符合模式?

如pattern=「abba」,str=「dog cat cat dog」,返回true

如pattern=「abba」,str=「dog cat cat fish」,返回false

字符集?

空串符合任意模式?還是不符合任意模式?

複製**

判斷兩個字串是否同構?

如果我們能夠尋找到乙個字符集到字符集的對映,使得通過這個字符集的對映,s可以轉變為t,則稱為s和t同構。

如 egg 和 add,返回true

如 foo 和 bar,返回false

如 ***** 和 title,返回true

複製**

注意

給定乙個字串,按照字母出現頻率的倒序重組整個字串

如「tree」,返回「eert」

如「cccaaa」,返回「cccaaa」

如「aabb」,返回「bbaa」

對於相同頻次的字母,順序任意。大小寫敏感。

複製**

注意

暴力解法:o(n^2)

雙索引對撞

使用查詢表

//時間複雜度:o(n)

//空間複雜度:o(n)

class solution ;

return vector(res, res + 2);

}record[nums[i]] = i;

}throw invalid_argument("the input has no solution");}};

複製**

leetcode15 3sum
給出乙個整形陣列,尋找其中的所有不同的三元組(a,b,c),使得a+b+c=0

如 nums = [-1, 0, 1, 2, -1, -4]

結果為[ [-1, 0, 1], [-1,-1,2] ]

leetcode18 4sum
給出乙個整形陣列,尋找其中的所有不同的四元組(a,b,c,d),使得a+b+c+d 等於乙個給定的數字target。

如 nums = [1, 0, -1, 0, -2, 2],target = 0

結果為[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]

leetcode16 3sum closest
給出乙個整形陣列,尋找其中的三個元素a,b,c,使得a+b+c的值最接近另外乙個給定的數字target

如 nums = [-1, 2, 1, -4],target = 1

結果為2 ( -1 + 2 + 1 = 2 )

複製**

注意

暴力解法:o(n^4)

500^4 = 625,0000,0000

將d中的元素放入查詢表:o(n^3)

500^3 = 1,2500,0000

將c+d的每一種可能放入查詢表:o(n^2)

**實現:

//時間複雜度o(n^2)

//空間複雜度o(n^2)

class solution

};複製**

思考

給出乙個字串陣列,將其中所有可以通過顛倒字元順序產生相同結果的單詞進行分組。

如 [ 「eat」, 「tea」, 「tan」, 「ate」, 「nat」, 「bat」]

返回[ [「ate」, 「eat」, 「tea」], [「nat」, 「tan」], [「bat」] ]

複製**

注意

暴力解法:o(n^3)

//時間複雜度:o(n^2)

//空間複雜度:o(n)

class solution

return res;

}private:

int dis( const pair&pa, const pair&pb)

};複製**

leetcode149 max points on a line
給出2d平面上的n個點,求出最多有多少個點在一條直線上?

// 時間複雜度: o(n)

// 空間複雜度: o(k)

class solution

return

false;}};

複製**

給出乙個整形陣列,若陣列中存在相同的元素,則返回true,否則返回false.

維持滑動窗的大小為k 遍歷每乙個元素,在活動視窗中尋找|v-nums[i]| < t, 即視窗中的元素範圍為:[v-t...v+t]之間。採用ceil和floor可以實現

// 時間複雜度: o(nlogn)

// 空間複雜度: o(k)

class solution

return

false;}};

複製**

-------------------------華麗的分割線--------------------

看完的朋友可以點個喜歡/關注,您的支援是對我最大的鼓勵。

個人部落格番茄技術小棧和掘金主頁

leetcode 02 03 鍊錶問題題解

題目描述 解法一 逐一比較,取出較小的。定義兩個指標,創造新鍊錶的頭節點,讓其分別只想兩個鍊錶,比較其大小取出較小的那個值,讓其等於新鍊錶的結點。這種解法是創造了新鍊錶,並沒有充分利用鍊錶的特性。listnode mergetwolists listnode l1,listnode l2 if te...

LeetCode 查詢 查詢表

元素 a 是否存在,通常用set 集合 set只儲存鍵,而不需要對應其相應的值。set中的鍵不允許重複 元素 a 出現了幾次 dict 字典 dict中的鍵不允許重複 通過將原有序列的關係對映統一表示為其他 演算法應用 leetcode 349 intersection of two arrays ...

leetcode題解(陣列問題)

面試中的演算法問題,有很多並不需要複雜的資料結構支撐。就是用陣列,就能考察出很多東西了。其實,經典的排序問題,二分搜尋等等問題,就是在陣列這種最基礎的結構中處理問題的,今天主要學習常見的陣列中處理問題的方法。template intbinarysearch t arr,int n,t target ...