algorithms_and_data_structures
1.0.0
目前狀態 | 統計數據 |
---|---|
C++ 問題總數 | 188 |
Python 問題總數 | 15 |
目前每日連勝 | 11 |
最後的連勝 | 2019年6月20日 - 2019年6月21日 |
目前連勝 | 2019年6月23日 - 2019年3月7日 |
注意:這裡的一些程式碼是舊的,是我學習 C++ 時寫的。程式碼可能不安全或做出錯誤的假設。請謹慎使用。始終歡迎拉取請求。
問題 | 解決方案 |
---|---|
找出鍊錶中倒數第n個節點。 | nthToLastNode.cpp、nth_to_last_node.py |
添加數字,其中數字的每個數字都由鍊錶的節點表示。以連結列表的形式給出輸出。 | add_two_numbers_lists.cpp, add_two_numbers_list.py |
交換鍊錶的節點而不交換資料。 | swapNodesWithoutSwappingData.cpp,swap_nodes_without_swapping_data.py |
以迭代和遞歸方式反轉鍊錶 | verseLinkedListIterAndRecurse.cpp,reverse_linkedlist.py |
給定一個鍊錶,反轉備用節點並在末尾追加。 | 反向替代節點.cpp |
僅給定一個節點指針,從鍊錶中刪除該節點。 | 刪除節點.cpp |
刪除整個鍊錶。 | 刪除鍊錶.cpp |
列印鍊錶的中間節點而不迭代兩次。 | 列印MiddleNode.cpp |
確定鍊錶是否為回文。 | listPallindrome.cpp |
將資料插入已排序的鍊錶中。 | insertInASortedLinkedList.cpp |
確定兩個給定鍊錶的交集(合併)點。 | findIntersectionPointOfLists.cpp,intersection_of_lists.py |
克隆一個具有 next 和隨機指標的鍊錶,空間複雜度 - O(1)。 | cloneListWithRandomPtr.cpp、clone_list_with_random_ptr.py |
給定一個包含重複項的排序鍊錶,在一次迭代中刪除重複項。 | 從排序清單中刪除重複項.cpp |
使用Floyd的環路查找演算法,偵測鍊錶是否包含環路,如果包含環路,則刪除環路 | floyedCycleDetection.cpp |
使用歸併排序對鍊錶進行排序 | merge_sort.cpp |
給定一個單鍊錶 L 0 -> L 1 -> … -> L n-1 -> L n 。重新排列清單中的節點(就地),使新形成的列表為: L 0 -> L n -> L 1 -> L n-1 -> L 2 -> L n-2 .... | 重新排列列表.cpp |
Include 包含資料結構和一些演算法的單一標頭實作。
資料結構/演算法 | 執行 |
---|---|
通用宏和演算法,如交換、隨機數生成 | 通用.h |
通用堆疊實現 | 堆疊.h |
通用佇列實現 | 隊列.h |
通用清單實施 | 列表.h |
二元搜尋樹的實現 | 二元搜尋樹.h |
快速排序的實現 | 快速排序.h |
歸併排序的實現 | 合併排序.h |
選擇排序的實現 | 選擇排序.h |
冒泡排序的實現 | 冒泡排序.h |
Linux核心雙鍊錶實現 | 雙鍊錶.h |
通用圖實作(鄰接表) | 圖.h |
堆排序的實現 | 堆排序.h |
我自己的字串庫實現 | pstring.h pstring.cpp |
問題 | 解決方案 |
---|---|
判斷一個數是否為2的冪。 | power_of_2.cpp |
新增兩個表示為字串的二進制數。 | addBin.cpp |
決定給定數字的下一個 2 的冪。 | next_power_of_2.cpp |
使用位元操作確定數字是否為 3 的倍數。 | multiple_of_3.cpp |
決定機器的位元組順序,以相反的位元組順序列印一個數字。 | 反向位元組序.cpp |
求給定數的奇偶性。 | 尋找奇偶校驗.cpp |
使用位元操作實現數字與 7 的快速乘法。 | 乘以7.cpp |
反轉無符號整數的位元(兩種方法 - 逐位反轉和分而治之)。 | 整數的反向位.cpp |
用於確定給定整數中最右邊設定位的位置的小函數。 | right_most_set_bit.cpp |
給定一個數字向量,只有一個數字出現奇數次,求數字。 | find_odd_one_out.cpp |
給定兩個整數,確定它們的和是否會整數溢位。 | 整數溢位.cpp |
將數字 A 轉換為 B 需要多少位元翻轉操作。 | countNumberOfBitFlips.cpp |
給定數字 x 和 x 的二進位表示形式的兩個位置(從右側開始),編寫一個函數,在給定的兩個位置處交換 n 個右位並傳回結果。也假設兩組比特不重疊。 | 交換位集.cpp |
不使用任何算術運算子將兩個數字相加 | addition_without_operators.cpp |
路易絲和理查玩遊戲。他們將計數器設為 N。在遊戲中,他們執行以下操作:
| 計數器遊戲.cpp |
確定兩個整數是否符號相反。 | check_opposite_signs.cpp |
交換給定整數的位置 p 和 q 處的兩位數。 | 交換位.cpp |
檢查一個數是否為4的冪。 | check_if_power_of_4.cpp |
問題 | 解決方案 |
---|---|
問題 1-1:第 6 版:寫一個演算法來確定字串是否具有唯一字元。我們可以在不使用額外資料結構的情況下做到這一點嗎? | 1-1-hasUniqueChars.cpp, 1-1-hasUniqueChars.py |
問題 1-2:第 5 版:當您傳遞以 null 結尾的 C 字串時,反轉字串。 | 1-2-edi5-reverseString.cpp |
問題 1-2:第 6 版:給定兩個字串,決定一個字串是否是另一個字串的排列。 | 1-2-perm-strings.cpp, 1-2-perm-strings.py |
問題 1-3:第 5 版:寫一個演算法來刪除字串中的重複字元。 | 1-3-edi5-removeDuplicates.cpp |
問題 1-3:第 6 版:URLify:將字串中的所有空格替換為「%20」。最好就地 | 1-3-URLify.cpp |
問題 1-4:第 6 版:給定一個字串,寫一個函數來檢查它是否是回文排列。 | 1-4-回文排列.cpp |
問題 1-5:第 6 版:可以對字串執行三種可能的編輯 - 插入字元、刪除字元、替換字元。給定兩個字串,確定它們是 1 編輯還是 0 編輯。 | 1-5-one-edit-away.cpp |
問題 1-6:實作一種執行基本字串壓縮的方法。範例字串aabcccccaaa應壓縮為a2b1c5a3 ,但如果壓縮字串大於原始字串,則傳回原始字串 | 1-6-字串壓縮.cpp |
問題1-7:將矩陣順時針(&逆時針)旋轉90度 | 1-7-矩陣旋轉.cpp |
問題 1-8:寫一個演算法,如果 MxN 矩陣的某個元素為 0,則其整個行和列都設為 0。 | 1-8-零矩陣.cpp |
問題 1-9:給定兩個字串 s1 和 s2,只需呼叫一個函數來確定 s2 是 s1 的旋轉,該函數檢查一個字串是否是另一個字串的旋轉。 | 1-9-字串旋轉.cpp |
問題 2-1:從未排序的鍊錶中刪除重複項。如果不允許臨時緩衝區怎麼辦? | 2-1-刪除-dups.cpp |
問題 2-2:從單鍊錶的最後一個節點確定第 k個節點。 (迭代和遞歸方法) | 2-2-kthToLast.cpp |
問題2-3:實作刪除單鍊錶中間節點的演算法 | 2-3-刪除-中間節點.cpp |
問題 2-4:圍繞值 x 劃分鍊錶,所有小於 x 的節點都位於所有大於等於 x 的節點之前 | 2-4-分區.cpp |
問題 2-5:有兩個由鍊錶表示的數字,其中每個節點包含一個數字。這些數字以相反的順序存儲,使得 1 的數字位於列表的開頭。編寫一個函數,將兩個數字相加並以鍊錶形式傳回總和。
| 2-5-新增清單.cpp |
問題2-6:判斷鍊錶是否為回文(2次迭代和1次遞歸方法) | 2-6-回文.cpp |
問題2-7:判斷兩個單鍊錶是否相交,如果相交,則傳回相交節點。交集是根據參考而不是值定義的 | 2-7-交叉點.cpp |
問題2-8:偵測鍊錶是否有環路,找到環路的起始節點並移除環路 | 2-8-循環檢測.cpp |
問題 | 解決方案 |
---|---|
使用不同記憶技術的斐波那契第N 項 | 斐波那契.cpp |
最長公共子序列問題 | lcs.cpp,longest_common_subsequence.py |
最大值連續子序列問題 wiki | 最大子序列.cpp |
加泰隆尼亞數 - 計算具有 n 個鍵的可能二元搜尋樹的數量 | 加泰隆尼亞語號碼.cpp |
計算 amxn 網格中從來源起點 (0, 0) 到目的地 (m-1, n-1) 的唯一路徑的數量。您只能向下或向右移動。 | 唯一路徑.cpp |
0-1 背包問題:假設你是個小偷,你想偷東西,房間裡裝滿了東西。您有一個背包,其最大容量為 W,您希望將其裝滿,使其價值最大。身為一個聰明的小偷,你知道房間裡每件物品的重量和價值。你會如何裝滿你的背包,這樣你就可以獲得最大可能的價值,這樣你只能裝滿容量W。 | 0_1_knapsack_problem.cpp |
問題 | 解決方案 |
---|---|
使用佇列對樹進行迭代級別順序遍歷 | levelOrderTraversalIterative.cpp,level_order_tree_traversal_iterative.py |
Tree的遞迴層序遍歷 | levelOrderTraversalRecursive.cpp,level_order_tree_traversal_recursive.py |
樹的之字形遍歷 | zigZagTraversal.cpp,zig_zag_traversal.py |
二元搜尋樹中給定節點的前驅和後繼 | 前驅後繼者.cpp |
給定二元搜尋樹中兩個節點的值,找出最低公共祖先(LCA)。假設這兩個值都存在於樹中。 | 最低共同祖先.cpp,最低共同祖先.py |
給定一棵二元樹(與二元搜尋樹不同),找出最低公共祖先(LCA)。 | 最低共同祖先二元樹.cpp |
給定一棵二元樹,每行列印出其所有根到葉路徑。 | printAllRootToLeafPath.cpp |
判斷一棵樹是否為和樹。 SumTree 是二元樹,其中節點的值等於其左子樹和右子樹中存在的節點總和。空樹就是SumTree,空樹的和可以認為是0。 | sumTree.cpp |
將樹轉換為 sumTree,使得每個節點都是原始樹的左子樹和右子樹的和。 | Convert_to_sum_tree.cpp,convert_to_sum_tree.py |
將排序數組轉換為平衡二元搜尋樹。 | 排序數組到BST.cpp |
給定一棵二元樹,產生每個垂直列的總和。 | 垂直求和.cpp |
給定二元樹和鍵,具有鍵的節點存在於樹中。找到帶有key的節點的所有祖先,這裡的祖先是從節點到根的直線路徑上的節點。 | node_ancestors_in_root_path.cpp |
給定二元樹和鍵,傳回具有鍵的節點的層級。根位於第 1 層,如果樹中不存在具有鍵的節點,則傳回 0 | 節點級.cpp |
給定一棵二元樹,找出從根到節點的所有路徑,其總和為k。 | k_sum_paths.cpp |
給定一棵二元樹,以相反的順序逐層列印其節點。即最後一級的所有節點應先列印,然後是倒數第二級的節點,依此類推。 | 反向層序遍歷.cpp |
以遞歸和迭代方式反轉二元樹。 | 反轉樹.cpp |
給定一個二元搜尋樹,找到其中給定鍵的 ceil 和 Floor。如果給定的鍵位於BST 中,則Floor 和ceil 都等於該鍵,否則ceil 等於BST 中的下一個更大的鍵(如果有),而Floor 等於BST 中的上一個更大的鍵(如果有) | Floor_ceil_bst.cpp |
尋找二元搜尋樹中的第 k 個最小元素 | kth_smallest.cpp |
驗證給定的二元樹是否為二元搜尋樹。 | validate_bst.cpp |
給定二元搜尋樹和目標數,如果 BST 中存在兩個元素且它們的總和等於給定目標,則傳回 true。 | 尋找目標k.cpp |
給定一個非空二元搜尋樹和一個目標值,找到 BST 中最接近目標的值。另外,要注意目標值是浮點數。只有一個最接近目標的唯一值。 | 最接近的bst_value.cpp,最接近的_bst_value.py |
給定一棵二元樹,遍歷前序,建構一個包含節點值和括號的字串輸出。空節點需要用空括號對「()」表示。並且需要省略所有不影響字串和原始二叉樹之間一對一映射關係的空括號對。程式碼檔案中的範例 | string_from_tree.cpp |
問題 | 解決方案 |
---|---|
字串搜尋的 Robin-Karp 演算法的實現 | robinKarpStringMatching.cpp |
找到給定字串的下一個排列,即。重新排列給定的字串,使其成為按字典順序大於給定字串的下一個字串 | next_permutation.cpp |
模式匹配Z演算法的實現 | z.cpp |
自創建字串庫的測試用例 | pstring_test.cpp |
取得字串中最後一個單字的長度。 | 最後一個單字的長度.cpp |
找出兩個字串之間的差異。字串 t 是透過隨機打亂字串 s 產生的,然後在隨機位置再添加一個字母。確定 t 中不同的字符 | 尋找差異.cpp |
問題 | 解決方案 |
---|---|
以螺旋順序列印矩陣的內容 | 矩陣螺旋列印.cpp |
給定一個 M x N 矩陣,將其逆時針旋轉 R 次,並顯示結果矩陣。 | 旋轉矩陣.cpp |
將陣列旋轉 r 個元素(向左或向右) | 數組旋轉.cpp |
給定一個重複/非重複整數數組,確定該數組中的第一個非重複整數 | 第一個非重複整數.cpp |
在Quantumland中,有n個城市,編號從1到n。這裡,c i表示第 i 個城市。 Quantumland 有 n−1 條道路。這裡,對於每個 i < n, ci和 c i+1之間有一條雙向道路。如果 c i或 c i+1中有警衛,則 c i和 c i +1之間的道路是安全的。女王已經在一些城市安置了一些警衛,但她不確定他們是否足以保證道路安全。她想知道需要雇用的最低數量的新警衛。有關輸入/輸出詳細信息,請參閱解決方案中的註釋。 | save_quantamland.cpp |
給定一個整數 N。對於 N=24,有 2 位數字(2 和 4)。這兩個數字都可以整除 24。 所以我們的答案是 2。 | 查找數字.cpp |
使用 Caeser Cipher 加密然後解密文字。 | caeser_cipher.cpp |
使用維吉尼亞密碼加密然後解密文字。 | vigenere_cipher.cpp |
高效能產生 1 到 N 之間的二進位數。 | n_binary.cpp |
實現電源功能 | 電源函數.cpp |
問題 | 解決方案 |
---|---|
列印字串的所有排列。範例:ABC 的排列為 ABC、ACB、BCA、BAC、CAB、CBA | 字串排列.cpp |
歐幾裡得演算法找出兩個數字的最大公約數。 (迭代和遞歸) | gcd.cpp |
使用分而治之的方法實現 pow(x,y)。試著以 O(logn) 實作它 | 戰俘.cpp |
計算大數的階乘,例如 100(它將有 158 位數字) | Factorial_of_large_num.cpp |
根據在傳統行動鍵盤上輸入的數字產生所有可能的單字 | 電話號碼.cpp |
給定數字的字串表示形式,從字串中刪除 n 個字符,以使數字表示形式盡可能最低。 | 最低可能數.cpp |
檢測一個數字是否為快樂的數字。如果將數字替換為其數字的平方和的一系列運算最終導致 1,則該數字是快樂數字。 | happy_number.cpp |
問題 | 解決方案 |
---|---|
我們有一系列股票的 n 個每日報價。我們需要計算所有 n 天的股票價格跨度。第 i 天的跨度定義為股票價格小於或等於第 i 天的最大連續天數。對於股票報價 {100, 60, 70, 65, 80, 85},跨度將為 {1, 1, 2, 1, 4, 5}。第 1 天的跨度始終為 1,現在第 2 天的股票價格為 60,並且之前沒有一天庫存低於 60。前一天是60,依此類推。 | stock_span_problem.cpp |
給定一個中綴表達式,將其轉換為後綴表達式,範例 (A+B)*C --> AB+C* | 中綴到後綴.cpp |
給定一個僅包含字元 '(', ')', '{', '}', '[' 和 ']' 的字串,確定輸入字串是否有效。 )」和「()[]{}」均有效,但「(]」和「([)]」無效。 | 有效括號.cpp |
問題 | 解決方案 |
---|---|
給定一個排序向量,傳迴向量中某個值出現的第一個索引,如果數字不存在,則傳回 -1 | First_occurrence_binary_search.cpp |
尋找整數數組中的第一個重複元素。給定一個整數數組,找到其中的第一個重複元素。我們需要找到出現多次且首次出現索引最小的元素。 | 第一個重複元素.cpp |
給定一個未排序的整數列表,A={a 1 ,a 2 ,…,a N },找出它們之間絕對差最小的一對元素?如果有多對,則將它們全部找到。 | 最接近的數字.cpp |
給定一個排序數組,確定該數組中固定點的索引。如果數組沒有定點,則傳回 -1。當元素的索引與索引相同時,陣列具有不動點,即 i == arr[i],期望時間複雜度 O(logn) | 定點.cpp |
求數組中先遞增後遞減的最大元素。輸入:arr[] = {8, 10, 20, 80, 100, 200, 400, 500, 3, 2, 1},輸出:500。預期時間複雜度為 O(logn)。 | 尋找最大值.cpp |
給定一個正整數和/或負整數數組,在數組中找到總和最接近 0 的一對。 | findClosestPairToZero.cpp |
藝術家 Numeros 有兩個清單 A 和 B,其中 B 是 A 的排列。不幸的是,在將它們從一個展覽運送到另一個展覽時,A 中遺漏了一些號碼。筆記:
| 缺失數字.cpp |
從兩個排序數組中找到最接近的一對。給定兩個排序數組和一個數字 x,找到總和最接近 x 的對,並且該對包含每個數組中的一個元素。給定兩個數組 ar1[0…m-1] 和 ar2[0..n-1] 和一個數字 x,我們需要找到一對 ar1[i] + ar2[j],使得 (ar1 [i] + ar2[j] – x) 是最小值。 | ClosestPairSorted.cpp |
給定一個包含 n 個元素的陣列 A,求三個索引 i、j 和 k,使得 A[i]^2 + A[j]^2 = A[K]^2。 O(n2) 時間複雜度與 O(1) 空間複雜度 | 平方和.cpp |
給定一個大小為 n 的未排序數組 arr[0..n-1],找到最小長度子數組 arr[s..e],以便對該子數組進行排序使整個數組排序。 | minLengthUnsortedArray.cpp |
找出算術級數中缺少的數字 | 缺號碼2.cpp |
找出 3 個排序向量中的共同元素 | commonIn3Arrays.cpp |
在未排序的陣列/向量中尋找具有給定總和的所有對 | find_pairs_with_sum.cpp |
給定一個數組,找到其中的峰值元素。峰值元素是大於其鄰居的元素。 | 峰元素.cpp |
給定一個不同非負整數的排序數組,找出其中最小的缺失元素。 | 最小缺失.cpp |
將向量中的所有零移至末尾 | move_zeros.cpp |
問題 | 解決方案 |
---|---|
圖的深度優先遍歷 | dfsDemo.cpp |
圖的廣度優先遍歷 | bfsDemo.cpp |
使用 Dijkstra 演算法計算從起始位置(節點 S)到圖中所有其他節點的最短距離。 | dijkstra-最短到達.cpp |
使用 Prim 演算法計算給定圖的最小生成樹的總權重(形成 MST 的邊的權重總和) | primsMST.cpp |
使用 Kruskal 演算法列印給定圖的最小生成樹 ( MST )。 | 克魯斯卡爾MST.cpp |
建立一個程序,為每個字元產生霍夫曼編碼作為表格。 | 哈夫曼編碼.cpp |
在包含字母的 2D 板上搜尋給定單字。可以透過順序遍歷相鄰的水平或垂直單元來構造單字。在組成單字的序列中,同一位置上的字母不能使用多次。 (請參閱文件頂部的範例。) | grid_word_search.cpp |
給定 2D 螢幕、像素的位置和要填滿的顏色的新值,用新顏色取代像素的顏色和所有相鄰(上、下、左、右)相同顏色的像素。這與 MS-PAINT 中的區域洪水填充(記住桶符號)相同。 | 洪水填充.cpp |
問題 | 解決方案 |
---|---|
給定兩個整數數組 A 和 B,每個數組包含 N 個整數。您可以自由排列數組中元素的順序。 A 和 B 是否存在可能的排列 A', B',使得對所有 i,A' i +B' i ≥ K,其中 A' i表示數組 A' 中的第i 個元素,B' i表示數組B ' 中的第 i 個元素。 | 兩個數組.cpp |
約翰正在接受命令。第 i個訂單是由第 i個客戶在 t i時間下的,需要 d i時間才能處理。客戶收到訂單的順序是什麼? (請參閱解決方案評論中的更多詳細資訊) | 訂單_訂單.cpp |
問題 | 解決方案 |
---|---|
您將獲得一個數字字串(例如“1234”、“567”等),根據我們在電話/行動撥號盤上看到的映射,提供我們可以從該數字字串生成的所有可能的字母組合。如果您在老式手機中輸入過短信,您就會知道。例如,“1”映射到“abc”,2 映射到“def”。你可以參考一下圖片..
| dialpad_combinations.cpp |
實現通配符模式處理並支援“?” &' '。
| 通配符匹配.cpp |
給定一個 2D 棋盤和字典中的單字列表,從列表中找到棋盤上所有可能的單字。 (檢查解決方案中的範例) | word_search.cpp |
問題 | 解決方案 |
---|---|
給定一個沒有重複項的排序整數數組,傳回其範圍的摘要。例如,給定 [0,1,2,4,5,7],返回 ["0->2","4->5","7"]。 | 摘要_範圍.cpp |
給定一個二維矩陣,具有下列屬性
| 搜尋2DII.cpp |
給定一個未排序的整數數組,找到第一個缺失的正整數。 (n) 且解應使用恆定空間 | 第一個缺失正數.cpp |
給定一個未排序的整數數組,找出最長連續元素序列的長度。例如:給定 [100, 4, 200, 1, 3, 2]。最長的連續元素序列是[1,2,3,4]。返回其長度:4。 | 最長連續Seq.cpp |
給定兩個排序整數數組 nums1 和 nums2,將 nums2 合併到 nums1 作為一個排序數組。 nums1和nums2中初始化的元素數分別為m和n。 | 合併數組.cpp |
給定一個非負整數數組,您最初位於數組的第一個索引處。陣列中的每個元素代表您在該位置的最大跳躍長度。確定您是否能夠到達最後一個索引。例如:
| 跳躍遊戲.cpp |
給定一個正整數,傳回 Excel 工作表中顯示的對應列標題。例如 1 -> A、2 -> B、...26 -> Z、27 -> AA、28 -> AB、...705 -> AAC | excelColSheetTitle.cpp |
給定一個陣列 nums,編寫一個函數將所有 0 移至其末尾,同時保持非零元素的相對順序。例如,給定 nums = [0, 1, 0, 3, 12],呼叫函數後,nums 應該為 [1, 3, 12, 0, 0]。 | moveZeroes.cpp |
給定一個整數數組,尋找該數組是否包含任何重複項。如果任何值在陣列中至少出現兩次,函數應傳回 true;如果每個元素都不同,則函數應傳回 false。 | 包含重複.cpp |
給定一個列表,將列表向右旋轉 k 個位置,其中 k 為非負數。例如:
| 旋轉列表.cpp |
給定兩個單字 word1 和 word2,找出將 word1 轉換為 word2 所需的最少步驟數。 (每次操作計為1步。)。允許對單字進行以下 3 種操作:
| 編輯距離.cpp |
給定一棵二元樹,填充每個下一個指標以指向其下一個右側節點。如果沒有下一個右節點,則下一個指標應設為 NULL。最初,所有下一個指標都設定為NULL。 。 | 連接下一個指標.cpp |
給定 n 對括號,寫一個函數來產生格式正確的括號的所有組合。例如,給定 n = 3,解集為「((()))」、「(()())」、「(())()」、「()(())」、「( ) ()()" | 產生括號.cpp |
給定一個包含從 0, 1, 2, ..., n 中選取的 n 個不同數字的數組,找出該數組中缺少的一個。 | 失蹤號碼.cpp |
假設已排序的陣列在您事先未知的某個樞軸處旋轉。 (即,0 1 2 4 5 6 7 可能變為 4 5 6 7 0 1 2)。求最小元素。您可以假設數組中不存在重複項。 | find_min_rotated.cpp |
給定一個包含 n 個整數的陣列 S,在 S 中找出三個整數,使得總和最接近給定數字 target。傳回三個整數的總和。您可以假設每個輸入都有一個解決方案。 | ThreeSumClosest.cpp |
給定 n 個非負整數 a 1 , a 2 , ..., a n ,其中每個表示座標 (i, a i ) 處的一個點。繪製 n 條垂直線,使得線 i 的兩個端點位於 (i, a i ) 和 (i, 0) 處。找出兩條線,它們與 x 軸一起形成一個容器,使得該容器包含最多的水。注意:容器不得傾斜。 | 最大面積.cpp |
給定一棵僅包含 0-9 數字的二元樹,每個根到葉路徑都可以代表一個數字。一個例子是根到葉路徑 1->2->3,它代表數字 123。解決方案評論中的範例 | sumRootToLeafNumbers.cpp |
假設您有一個數組,其中第 i 個元素是給定股票在第 i 天的價格。如果您最多只被允許完成一筆交易(即買入一股股票並賣出一股股票),請設計一種演算法來找到最大利潤。 | 最大利潤股票.cpp |
給定充滿非負數的 amxn 網格,找到一條從左上角到右下角的路徑,該路徑最小化沿其路徑的所有數字的總和。注意:在任何時間點您只能向下或向右移動。 | 最小路徑.cpp |
計算小於非負數 n 的質數的數量。 | 質數計數.cpp |
假設只能使用從 1 到 9 的數字,而每個組合都應該是一組唯一的數字,請找出 k 個數字的所有可能組合,總和為數字 n。確保集合中的數字按升序排序。例:對於k = 3, n = 9 結果將是[[1,2,6], [1,3,5], [2,3,4]],類似地對於k = 3, n = 7,結果將是[[1,2,4]]。 | 組合Sum3.cpp |
給定一個非負整數 num,重複將其所有數字相加,直到結果只有一位數字。例如:給定 num = 38,過程如下:3 + 8 = 11, 1 + 1 = 2。跟進:你能在 O(1) 運行時中不使用任何循環/遞歸來完成它嗎? | 添加數字.cpp |
給定一個單元格值為0 或1 的矩陣。中行駛可能的方向,即左、右、上、下。 | 最短路徑迷宮.cpp |
兩個整數之間的漢明距離是對應位不同的位置的數量。給定兩個整數 x 和 y,計算漢明距離。 | 漢明距離.cpp |
給定兩棵二元樹,想像一下,當您將其中一棵樹覆蓋另一棵時,兩棵樹的某些節點重疊,而其他節點則不重疊。您需要將它們合併到一個新的二元樹中。合併規則是,如果兩個節點重疊,則將節點值相加作為合併節點的新值。否則,NOT null 節點將被用作新樹的節點。 | merge_trees.cpp |
編寫一個函數,將字串作為輸入並僅反轉字串的元音。 | 反向元音.cpp |
給定一個字串,根據字元出現的頻率將其按降序排序。
| 按頻率排序Char.cpp |
除 Self 之外的數組的乘積。給定一個由 n 個整數組成的數組,其中 n > 1,nums,傳回一個數組輸出,使得 output[i] 等於 nums 中除 nums[i] 之外的所有元素的乘積。 | 產品_例外_自我.cpp |
給定一個已排序的數組,就地刪除重複項並傳回新的長度。數組中超出唯一元素大小的內容並不重要。預期 O(1) 空間複雜度和 O(n) 時間複雜度。 | 刪除重複項.cpp |
計算網格中島嶼的數量。給定一個網格,1表示陸地,0表示水體,確定島嶼的數量(更多詳細資訊請參閱問題評論) | 島嶼數.cpp |
從資料流中尋找中位數。設計一個資料結構,支援 addNum 將數字添加到流中,並 findMedian 傳回目前為止看到的當前數字的中位數。另外,如果數字個數為偶數,則傳回中間兩個元素的平均值,否則會傳回中位數。 | 中值流.cpp |
刪除最少數量的無效括號以使輸入字串有效。傳回所有可能的結果。注意:輸入字串可能包含括號 ( 和 ) 以外的字母 | 刪除_無效_括號.cpp |
給定一個陣列和一個值,就地刪除該值的所有實例並傳回新的長度。不要為另一個數組分配額外的空間,必須透過用O(1)額外的記憶體修改輸入數組來完成此操作。元素的順序可以更改。您留下的新長度不管是什麼都沒關係。 | remove_element.cpp |
找出兩個陣列/向量的交點,給定兩個向量找到它們相互作用的結果。結果應僅包含獨特的字符,並且可以按任何順序 | Intersection_of_array.cpp |
給定模式和弦弦,請尋找是否遵循相同的模式。以下內容意味著完整的匹配,因此圖案中的字母與str中的非空詞之間有兩次ber。例子: | |
模式=“ abba”,str =“狗貓狗”應該回傳true。 | |
模式=“ abba”,str =“狗貓魚”應該返回假。 | |
模式=“ AAAA”,str =“狗貓狗”應該回傳false。 | |
模式=“ abba”,str =“狗狗狗”應該返回假。 | word_pattern.cpp |
為您提供了一個數字向量,其中每個數字代表 | |
股票的價格。如果您只能完成 | |
每天一筆交易(即買一張並賣出一張股票),設計 | |
一種演算法以找到最大利潤。 | best_time_to_buy_sell.cpp |
給定一個句子,扭轉一個句子中每個單字中字元的順序,同時仍保留空格和初始單字順序。 | |
例子: | |
輸入:她喜歡巧克力 | |
輸出:ehs sevol etalocohc | reverse_words.cpp |