algorithms_and_data_structures
1.0.0
現在の状況 | 統計 |
---|---|
C++ の総問題数 | 188 |
Python の総問題数 | 15 |
現在の毎日の連続記録 | 11 |
最後のストリーク | 2019/06/20 - 2019/06/21 |
現在の連続数 | 2019/06/23 - 2019/07/03 |
注: ここにあるコードの一部は古いもので、私が 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 |
リンクされたリストを反復的かつ再帰的に反転します | reverseLinkedListIterAndRecurse.cpp、reverse_linkedlist.py |
リンクされたリストを指定して、代替ノードを逆にして最後に追加します。 | reverseAlternateNodes.cpp |
ノード ポインタを指定した場合のみ、リンク リストからノードを削除します。 | deleteNode.cpp |
リンクリスト全体を削除します。 | deleteLinkedlist.cpp |
リンクリストの中間ノードを 2 回反復せずに出力します。 | printMiddleNode.cpp |
リンクされたリストが回文であるかどうかを判断します。 | listPallindrome.cpp |
並べ替えられたリンク リストにデータを挿入します。 | insertInASortedLinkedList.cpp |
指定された 2 つのリンク リストの交差 (マージ) 点を決定します。 | findIntersectionPointOfLists.cpp、intersection_of_lists.py |
次のポインタとランダムなポインタ、Space Complexity - O(1) を持つリンクリストのクローンを作成します。 | cloneListWithRandomPtr.cpp、clone_list_with_random_ptr.py |
重複を含む並べ替えられたリンク リストを指定して、1 回の繰り返しで重複を削除します。 | RemoveDuplicatesFromSortedList.cpp |
フロイドのサイクル検索アルゴリズムを使用して、リンクリストにサイクルが含まれているかどうかを検出し、サイクルが含まれている場合はループを削除します。 | floyedCycleDetection.cpp |
マージソートを使用してリンクリストを並べ替える | マージソート.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 |
汎用スタックの実装 | stack.h |
汎用キューの実装 | キュー.h |
汎用リストの実装 | list.h |
二分探索ツリーの実装 | バイナリサーチツリー.h |
クイックソートの実装 | クイックソート.h |
マージソートの実装 | マージソート.h |
選択ソートの実装 | 選択ソート.h |
バブルソートの実装 | バブルソート.h |
Linux カーネルの Double LinkedList の実装 | double_linked_list.h |
汎用グラフの実装 (隣接リスト) | グラフ.h |
ヒープソートの実装 | heap_sort.h |
私自身の文字列ライブラリの実装 | pstring.h pstring.cpp |
問題 | 解決 |
---|---|
数値が 2 の累乗かどうかを判断します。 | power_of_2.cpp |
文字列として表現された 2 つの 2 進数を加算します。 | addBin.cpp |
指定された数値の次の 2 の累乗を決定します。 | next_power_of_2.cpp |
ビット操作を使用して、数値が 3 の倍数であるかどうかを判断します。 | 3 の倍数.cpp |
マシンのエンディアンを決定し、エンディアンを逆にした数値を出力します。 | reverseEndianness.cpp |
指定された数値のパリティを求めます。 | find_parity.cpp |
ビット操作を使用して、数値の 7 への高速乗算を実装します。 | multiply_by_7.cpp |
符号なし整数のビットを反転します (2 つの方法 - ビットごとの反転と分割統治)。 | reverseBitsOfAnInteger.cpp |
指定された整数の右端の設定ビットの位置を決定する小さな関数。 | right_most_set_bit.cpp |
数値のベクトルが与えられた場合、1 つの数値だけが奇数回出現する場合、その数値を見つけます。 | find_odd_one_out.cpp |
2 つの整数が与えられた場合、それらの合計が整数オーバーフローになるかどうかを判断します。 | 整数オーバーフロー.cpp |
数値 A を B に変換するために必要なビット フリップ演算の数。 | countNumberOfBitFlips.cpp |
数値 x と、x のバイナリ表現の (右側から) 2 つの位置が与えられた場合、指定された 2 つの位置で右の n ビットを交換し、結果を返す関数を作成します。また、2 組のビットが重複しないことも考慮されています。 | swapSetOfBits.cpp |
算術演算子を使用せずに 2 つの数値を加算します | 演算子なしの追加.cpp |
ルイーズとリチャードはゲームをします。彼らはカウンターをNに設定しています。ルイーズが最初のターンを取得し、その後ターンが交互に行われます。ゲームでは、次の操作を実行します。
| カウンターゲーム.cpp |
2 つの整数が反対の符号であるかどうかを判断します。 | check_opposite_signs.cpp |
指定された整数の位置 p と q の 2 ビットを交換します。 | スワップビッツ.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 版: 2 つの文字列が与えられ、一方が他方の順列であるかどうかを判断します。 | 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: 文字列に対して実行できる編集は 3 つあります - 文字の挿入、文字の削除、文字の置換。 2 つの文字列が与えられた場合、それらが 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: 2 つの文字列 s1 と s2 が与えられた場合、一方の文字列が別の文字列の回転であるかどうかをチェックする関数の呼び出しを 1 回だけ使用して、s2 が s1 の回転であると判断します。 | 1-9-文字列回転.cpp |
問題 2-1:ソートされていないリンク リストから重複を削除します。一時バッファが許可されていない場合はどうなるでしょうか。 | 2-1-削除-dups.cpp |
問題 2-2: 単一リンク リストの最後から k番目のノードを決定します。 (反復的および再帰的アプローチ) | 2-2-kthToLast.cpp |
問題 2-3: 単一リンクリストの途中にあるノードを削除するアルゴリズムを実装する | 2-3-delete-middle-node.cpp |
問題 2-4: 値 x を中心にリンク リストを分割します。x より小さいすべてのノードが x 以上のすべてのノードの前に来ます。 | 2-4-パーティション.cpp |
問題 2-5: 各ノードに 1 桁の数字が含まれるリンク リストで表される 2 つの数値があります。数字は逆の順序で格納され、1 の数字がリストの先頭になります。 2 つの数値を加算し、その合計をリンク リストとして返す関数を作成します。例:
| 2-5-追加リスト.cpp |
問題 2-6: リンク リストが回文であるかどうかを判断します (2 回の反復アプローチと 1 回の再帰的アプローチ) | 2-6-回文.cpp |
問題 2-7: 2 つの単一リンクされたリストが交差するかどうかを判断し、交差する場合は交差するノードを返します。交差は値ではなく参照に基づいて定義されます | 2-7-交差点.cpp |
問題 2-8: リンク リストにループがあるかどうかを検出し、ループの開始ノードを見つけてループを削除します。 | 2-8-ループ検出.cpp |
問題 | 解決 |
---|---|
さまざまなメモ化手法を使用した N番目のフィボナッチ項 | フィボナッチ.cpp |
最長共通部分列問題 | lcs.cpp、longest_common_subsequence.py |
最大値連続部分問題 wiki | max_subsequence.cpp |
カタロニア語番号 - n 個のキーを持つ可能な二分探索木の数を数えます | カタラン語番号.cpp |
amxn グリッド内のソース起点 (0, 0) から宛先 (m-1, n-1) までの一意のパスの数を計算します。下方向または右方向のみに移動できます。 | unique_paths.cpp |
0-1 ナップサック問題: あなたが泥棒で、部屋が物でいっぱいで物を盗もうとしていると想像してください。最大容量の重量 W を扱うことができるナップザックがあり、その価値が最大になるようにそれを詰めたいと考えています。賢い泥棒であるあなたは、部屋にある各アイテムの重量と価値を知っています。可能な最大値を得るために、つまり容量 W までしか詰めることができないように、ナップザックをどのように満たしますか。 | 0_1_ナップサック_問題.cpp |
問題 | 解決 |
---|---|
キューを使用したツリーの反復レベル順序走査 | levelOrderTraversalIterative.cpp、level_order_tree_traversal_iterative.py |
ツリーの再帰的レベル順序走査 | levelOrderTraversalRecursive.cpp、level_order_tree_traversal_recursive.py |
木のジグザグトラバース | zigZagTraversal.cpp、zig_zag_traversal.py |
二分探索ツリー内の特定のノードの先行ノードと後続ノード | 前任者後継者.cpp |
二分探索ツリー内の 2 つのノードの値を指定して、最低共通祖先 (LCA) を見つけます。両方の値がツリーに存在すると仮定します。 | minimum-common-ancestor.cpp、most_common_ancestor.py |
(二分探索ツリーとは異なり) 二分木が与えられた場合、最低共通祖先 (LCA) を見つけます。 | 最も低い共通祖先バイナリツリー.cpp |
バイナリ ツリーを指定して、そのルートから葉へのパスをすべて 1 行に 1 つずつ出力します。 | printAllRootToLeafPath.cpp |
ツリーが合計ツリーかどうかを判断します。 SumTree は、ノードの値がその左のサブツリーと右のサブツリーに存在するノードの合計に等しいバイナリ ツリーです。空のツリーは SumTree であり、空のツリーの合計は 0 と見なされます。リーフ ノードも SumTree と見なされます。 | sumTree.cpp |
各ノードが元のツリーの左と右のサブツリーの合計になるように、ツリーを sumTree に変換します。 | Convert_to_sum_tree.cpp、convert_to_sum_tree.py |
ソートされた配列を平衡二分探索ツリーに変換します。 | sortedArrayToBST.cpp |
二分木が与えられた場合、各垂直列の合計を生成します。 | 垂直合計.cpp |
バイナリ ツリーとキーが与えられると、キーを持つノードがツリー内に存在します。キーを使用してノードのすべての祖先を検索します。ここでの祖先は、ノードからルートまでの直線パス上にあるノードです。 | node_ancestors_in_root_path.cpp |
バイナリ ツリーとキーを指定すると、キーを持つノードのレベルを返します。ルートはレベル 1 にあり、キーを持つノードがツリーに存在しない場合は 0 を返します。 | ノードのレベル.cpp |
二分木が与えられた場合、ルートからノードまでのすべてのパスを見つけます。その合計は k です。 | k_sum_paths.cpp |
バイナリ ツリーが与えられた場合、そのノードをレベルごとに逆の順序で出力します。つまり、最後のレベルに存在するすべてのノードが最初に出力され、次に最後から 2 番目のレベルのノードが続きます。どのレベルのすべてのノードも左から右に出力される必要があります。 | reverseLevelOrderTraversal.cpp |
再帰的かつ反復的にバイナリ ツリーを反転します。 | invert_a_tree.cpp |
二分探索ツリーを指定して、その中で指定されたキーの上限と下限を見つけます。指定されたキーが BST 内にある場合、floor と ceil は両方ともそのキーと等しくなります。そうでない場合、ceil は BST 内で次に大きいキー (存在する場合) と等しく、floor は BST 内で前の大きいキー (存在する場合) と等しくなります。 | フロア_ceil_bst.cpp |
二分探索木で k 番目に小さい要素を見つける | kth_smallest.cpp |
指定された二分木が二分探索木であるかどうかを検証します。 | validate_bst.cpp |
二分探索ツリーとターゲット番号を指定すると、BST に 2 つの要素が存在し、それらの合計が指定されたターゲットに等しい場合に true を返します。 | find_target_k.cpp |
空ではない二分探索ツリーとターゲット値が与えられた場合、ターゲットに最も近い BST 内の値を見つけます。また、ターゲット値は浮動小数点であることに注意してください。ターゲットに最も近い一意の値は 1 つだけ存在します。 | 最も近い_bst_value.cpp、最も近い_bst_value.py |
バイナリ ツリーを指定して、事前順序をたどって、ノード値と括弧を含む文字列出力を構築します。 null ノードは空のかっこペア「()」で表す必要があります。また、文字列と元のバイナリ ツリー間の 1 対 1 のマッピング関係に影響を与えない空のかっこのペアをすべて省略する必要があります。コードファイルの例 | string_from_tree.cpp |
問題 | 解決 |
---|---|
文字列検索のための Robin-Karp アルゴリズムの実装 | robinKarpStringMatching.cpp |
指定された文字列の次の順列を検索します。指定された文字列より辞書編集上で次に大きい文字列になるように指定された文字列を再配置します。 | next_permutation.cpp |
パターンマッチングのためのZアルゴリズムの実装 | z.cpp |
自作の文字列ライブラリのテストケース | pstring_test.cpp |
文字列内の最後の単語の長さを取得します。 | 最後の単語の長さ.cpp |
2 つの文字列の違いを見つけます。文字列 t は、文字列 s をランダムにシャッフルし、ランダムな位置にもう 1 文字追加することによって生成されます。 t で異なる文字を決定します | find_difference.cpp |
問題 | 解決 |
---|---|
行列の内容を螺旋状に出力します。 | マトリックス_スパイラル_プリント.cpp |
M x N 行列を指定して、反時計回りに R 回転させて、結果の行列を表示します。 | 回転マトリックス.cpp |
配列を r 要素分 ( left または right ) 回転します。 | 配列回転.cpp |
反復/非反復整数の配列を指定して、この配列内の最初の非反復整数を決定します。 | first_non_repeat_int.cpp |
クォンタムランドには、1 から n までの番号が付けられた n 個の都市があります。ここで、ciはi番目の都市を示します。クォンタムランドには n−1 本の道路があります。ここで、 ciと c i+1 の間には、i < n ごとに双方向の道路があります。フラットランドがクォンタムランドを攻撃しようとしているという噂があり、女王は自分の土地を安全に保ちたいと考えています。 c iと c i+1 の間の道路は、 c iまたは c i+1に警備員がいる場合は安全です。女王はすでにいくつかの都市に数人の警備員を配置しているが、彼らが道路の安全を守るのに十分かどうかは確信が持てない。彼女は、雇用する必要がある新しい警備員の最小数を知りたいと考えています。入出力の詳細については、ソリューションのコメントを参照してください。 | save_quantamland.cpp |
整数 N が与えられます。この数値の中から N を正確に除算する (0 を余りとして残す除算) 桁を見つけ、その数を表示します。 N=24 の場合、2 桁 (2 と 4) になります。これらの数字は両方とも 24 を正確に割ります。したがって、答えは 2 です。詳細については、ソリューション ファイルのヘッダー コメントを参照してください。 | findDigits.cpp |
Caeser Cipher を使用してテキストを暗号化し、復号します。 | caeser_cipher.cpp |
ヴィジュネール暗号を使用してテキストを暗号化し、復号します。 | vigenere_cipher.cpp |
1 から N までの 2 進数を効率的に生成します。 | n_binary.cpp |
べき乗関数を実装する | power_function.cpp |
問題 | 解決 |
---|---|
文字列のすべての順列を出力します。例: ABC の順列は、ABC、ACB、BCA、BAC、CAB、CBA です。 | string_permutations.cpp |
2 つの数値の最大公約数を見つけるユークリッド アルゴリズム。 (反復的および再帰的) | gcd.cpp |
分割統治アプローチを使用して pow(x,y) を実装します。 O(logn)で実装してみる | pow.cpp |
大きな数、たとえば 100 の階乗を計算します (158 桁になります) | 大きい数値の階乗.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 未満だった日はありません。したがって、スパンは 1 のままです。3 日目の在庫の価格は 70 であるため、そのスパンは前日は 60 だったので、2 になります。 | 在庫_スパン_問題.cpp |
与えられた中置式を後置式に変換します。例 (A+B)*C --> AB+C* | infix_to_postfix.cpp |
文字 '('、')'、'{'、'}'、'['、および ']' のみを含む文字列を指定して、入力文字列が有効かどうかを判断します。括弧は正しい順序で閉じる必要があります ("() )" と "()[]{}" はすべて有効ですが、"(]" と "([)]" は無効です。 | valid_parenthesis.cpp |
問題 | 解決 |
---|---|
ソートされたベクトルを指定すると、ベクトル内の値の出現の最初のインデックスを返します。数値が存在しない場合は、-1 を返します。 | first_occurrence_binary_search.cpp |
整数の配列内の最初の繰り返し要素を検索します。整数の配列が与えられた場合、その中で最初に繰り返される要素を見つけます。複数回出現し、最初の出現インデックスが最小である要素を見つける必要があります。 | firstRepeatingElement.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。配列は厳密に増加または減少する場合もあります。 ExpectedTime の複雑さは O(logn) です。 | findmaximum.cpp |
正および/または負の整数の配列を指定して、配列内で合計が 0 に最も近いペアを見つけます。 | findClosestPairToZero.cpp |
芸術家ヌメロスは 2 つのリスト A と B を持っていて、B は A の順列です。ヌメロスはこれらのリストを非常に誇りに思っていました。残念ながら、ある展示会から別の展示会に運ぶときに、A のいくつかの番号が抜けてしまいました。欠けている番号を見つけることができますか?注:
| missingNumbers.cpp |
ソートされた 2 つの配列から最も近いペアを見つけます。ソートされた 2 つの配列と数値 x が与えられた場合、合計が x に最も近く、そのペアに各配列の要素が含まれるペアを見つけます。 2 つの配列 ar1[0…m-1] と ar2[0..n-1] および数値 x が与えられている場合、(ar1 の絶対値が成立するような ar1[i] + ar2[j]) のペアを見つける必要があります。 [i] + ar2[j] – x) が最小になります。 | 最も近いペアソート.cpp |
n 要素の配列 A が与えられた場合、A[i]^2 + A[j]^2 = A[K]^2 となる 3 つのインデックス i、j、k を見つけます。 O(n2) 時間計算量と O(1) 空間計算量 | squareSum.cpp |
サイズ n のソートされていない配列 arr[0..n-1] を指定して、この部分配列をソートすると配列全体がソートされるような最小長の部分配列 arr[s..e] を見つけます。 | minLengthUnsortedArray.cpp |
等差数列で欠落している数字を見つける | missingNumber2.cpp |
3 つの並べ替えられたベクトルの共通要素を見つける | commonIn3Arrays.cpp |
ソートされていない配列/ベクトル内の指定された合計を持つすべてのペアを検索します。 | find_pairs_with_sum.cpp |
配列が与えられた場合、その配列内のピーク要素を見つけます。ピーク要素は、隣接する要素よりも大きい要素です。 | ピーク要素.cpp |
個別の非負の整数のソートされた配列を指定して、その中で欠落している最小の要素を見つけます。 | smallest_missing.cpp |
ベクトル内のすべてのゼロを最後に移動します | move_zeros.cpp |
問題 | 解決 |
---|---|
グラフの深さ優先走査 | dfsDemo.cpp |
グラフの幅優先走査 | bfsDemo.cpp |
ダイクストラ アルゴリズムを使用して、開始位置 (ノード S) からグラフ内の他のすべてのノードまでの最短距離を計算します。 | ダイクストラ-最短リーチ.cpp |
Prim のアルゴリズムを使用して、指定されたグラフの最小スパニング ツリーの合計の重み (MST を構成するエッジの重みの合計) を計算します。 | primsMST.cpp |
クラスカルのアルゴリズムを使用して、指定されたグラフの最小スパニング ツリー( MST )を出力します。 | クルスカルMST.cpp |
各文字のハフマンエンコーディングをテーブルとして生成するプログラムを作成します。 | huffman_encoding.cpp |
文字が含まれる 2D ボード内で指定された単語を検索します。単語は、隣接する水平または垂直セルを順番に移動することによって構築できます。単語を構成するシーケンス内で、同じ位置にある文字を複数回使用することはできません。 (例については、ファイルの先頭を確認してください。) | グリッドワード検索.cpp |
2D 画面、ピクセルの位置、および塗りつぶす色の新しい値が指定された場合、ピクセルの色と隣接する (上、下、左、右) すべての同じ色のピクセルを新しい色で置き換えます。これは、MS-PAINT の領域の塗りつぶし (バケツのシンボルを思い出してください) と同じです。 | フラッドフィル.cpp |
問題 | 解決 |
---|---|
それぞれ N 個の整数を含む 2 つの整数配列 A と B が与えられます。配列内の要素の順序は自由に変更できます。すべての i について A' i +B' i ≥ K となるような、A と B の置換 A'、B' はありますか。ここで、A' i は配列 A' の i 番目の要素を示し、B' i は配列 A' の i番目の要素を示します。配列 B' の i番目の要素。 | two_arrays.cpp |
ジョンは注文を受けています。 i番目の注文は t i時点で i番目の顧客によって行われ、手続きが完了するまでに d i時間がかかります。顧客が注文を受け取る順序は何ですか? (ソリューションのコメントで詳細を参照してください) | order_order.cpp |
問題 | 解決 |
---|---|
数字列 (「1234」、「567」など) が与えられます。電話/携帯電話のダイヤルパッドに表示されるマッピングに基づいて、この数字列から生成できるすべての文字の組み合わせを入力します。古いスタイルの電話で SMS を入力したことがある方ならご存知でしょう。たとえば、「1」は「abc」にマッピングされ、2 は「def」にマッピングされます。画像を参照できます。
| ダイヤルパッドの組み合わせ.cpp |
「?」をサポートするワイルドカード パターン マッチングを実装します。 &「 」。
| wild_card_matching.cpp |
2D ボードと辞書の単語リストが与えられ、ボード上の考えられるすべての単語をリストから見つけます。 (ソリューション内の例を確認してください) | word_search.cpp |
問題 | 解決 |
---|---|
重複のないソートされた整数配列を指定すると、その範囲の概要を返します。たとえば、[0,1,2,4,5,7] の場合、["0->2","4->5","7"] を返します。 | summary_ranges.cpp |
次のプロパティを持つ 2D 行列が与えられたとします。
| search2DII.cpp |
ソートされていない整数配列を指定して、最初に欠落している正の整数を見つけます。例: [1,2,0] は 3 を返し、[3,4,-1,1] は 2 を返す必要があります。予想される時間計算量は O(n) であり、解は次のようになります。一定のスペースを使用する | firstMissingPositiveNum.cpp |
ソートされていない整数の配列を指定して、最長の連続要素シーケンスの長さを見つけます。例: [100, 4, 200, 1, 3, 2] と仮定します。連続する最長の要素シーケンスは [1, 2, 3, 4] です。その長さを返します: 4。アルゴリズムは O(n) の複雑さで実行する必要があります。 | 最長連続シーケンス.cpp |
2 つのソートされた整数配列 nums1 と nums2 を指定し、nums2 を 1 つのソートされた配列として nums1 にマージします。nums1 には、nums2 からの追加要素を保持するのに十分なスペース (m + n 以上のサイズ) があると想定できます。 nums1 と nums2 で初期化される要素の数はそれぞれ m と n です。 | mergeArrays.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 |
整数の配列が与えられた場合、その配列に重複が含まれているかどうかを確認します。関数は、配列内に値が少なくとも 2 回出現する場合は true を返す必要があり、すべての要素が異なる場合は false を返す必要があります。 | 重複.cppを含む |
与えられたリストを k 桁分右に回転します。k は負ではありません。例えば:
| 回転リスト.cpp |
2 つの単語 word1 と word2 が与えられた場合、word1 を word2 に変換するために必要な最小ステップ数を見つけます。 (1回の操作を1ステップとしてカウントします。)単語に対して次の 3 つの操作が許可されています。
| editDistance.cpp |
バイナリ ツリーが与えられた場合、各次のポインタを次の右のノードを指すように設定します。次の右のノードがない場合は、次のポインタを NULL に設定する必要があります。最初は、すべてのネクスト ポインタが NULL に設定されます。一定の追加スペースのみを使用できます。これは完全な 2 分木であると想定できます (つまり、すべての葉が同じレベルにあり、すべての親に 2 つの子があります)。 | connectNextPointers.cpp |
n 組のかっこが指定された場合、適切な形式のかっこのすべての組み合わせを生成する関数を作成します。たとえば、n = 3 の場合、解セットは"((()))"、"(()())"、"(())()"、"()(())"、"( )()()" | かっこの生成.cpp |
0、1、2、...、n から取得した n 個の異なる数値を含む配列が指定された場合、配列に欠落している数値を見つけます。たとえば、nums = [0, 1, 3] と指定すると、2 が返されます。 | missing_number.cpp |
ソートされた配列が、事前に未知のピボットで回転されたとします。 (つまり、0 1 2 4 5 6 7 は 4 5 6 7 0 1 2 になる可能性があります)。最小の要素を求めます。配列には重複が存在しないと想定できます。 | find_min_rotated.cpp |
n 個の整数の配列 S が与えられた場合、合計が指定された数値ターゲットに最も近くなるように、S 内の 3 つの整数を見つけます。 3 つの整数の合計を返します。各入力には正確に 1 つの解があると想定できます。 | threeSumClosest.cpp |
n 個の非負の整数 a 1 、a 2 、...、a nが与えられるとします。ここで、それぞれは座標 (i, a i ) の点を表します。 n 本の垂直線は、線 i の 2 つの端点が (i, a i ) と (i, 0) になるように描画されます。コンテナに最も多くの水分が含まれるように、x 軸とともにコンテナを形成する 2 つの線を見つけます。注意:容器を傾けないでください。 | maxArea.cpp |
0 ~ 9 の数字のみを含む二分木があるとすると、ルートから葉への各パスは数値を表すことができます。例としては、数値 123 を表すルートからリーフへのパス 1->2->3 があります。ルートからリーフまでのすべての数値の合計を求めます。ソリューションコメントの例 | sumRootToLeafNumbers.cpp |
i 番目の要素が i 日目の特定の株式の価格である配列があるとします。最大でも 1 つのトランザクション (つまり、株式を 1 株買って 1 株売る) しか完了できない場合は、最大の利益を見つけるアルゴリズムを設計します。 | maxProfitStock.cpp |
非負の数値で満たされた amxn グリッドが与えられた場合、そのパスに沿ったすべての数値の合計を最小にする左上から右下へのパスを見つけます。注: どの時点でも、下または右のいずれかにのみ移動できます。 | minPath.cpp |
非負の数 n より小さい素数の数を数えます。 | countPrimes.cpp |
1 から 9 までの数値のみを使用でき、各組み合わせは一意の数値セットである必要があることを前提として、合計すると数値 n になる k の数値の可能なすべての組み合わせを見つけます。セット内の数値が昇順に並べ替えられていることを確認します。例: k = 3、n = 9 の場合、結果は [[1,2,6], [1,3,5], [2,3,4]] となり、同様に k = 3、n = 7 の場合、結果は次のようになります。 [[1,2,4]] になります。 | 組み合わせ合計3.cpp |
負でない整数を指定すると、結果が 1 桁になるまですべての桁を繰り返し加算します。例: num = 38 の場合、プロセスは次のようになります: 3 + 8 = 11、1 + 1 = 2。2 は 1 桁しかないので、それを返します。フォローアップ: O(1) ランタイムでループ/再帰なしで実行できますか? | addDigits.cpp |
セル値が 0 または 1 の行列が与えられます。(a1, b1) から (a2, b2) までの最短パスの長さを見つけます。パスは値 1 を持つセルのみを経由して構築でき、4 方向のみ移動できるようになります。可能な方向、つまり左、右、上、下。 | 最短パス_迷路.cpp |
2 つの整数間のハミング距離は、対応するビットが異なる位置の数です。 2 つの整数 x と y を指定して、ハミング距離を計算します。 | ハミング_ディスタンス.cpp |
2 つのバイナリ ツリーがあり、一方をもう一方を覆うように配置すると、2 つのツリーの一部のノードは重なり、他のノードは重なり合わないと想像してください。それらを新しいバイナリ ツリーにマージする必要があります。マージ ルールは、2 つのノードが重複する場合、ノードの値を合計してマージされたノードの新しい値にするというものです。それ以外の場合は、NOT null ノードが新しいツリーのノードとして使用されます。 | merge_trees.cpp |
文字列を入力として受け取り、文字列の母音のみを反転する関数を作成します。 | reverse_母音.cpp |
指定された文字列を、文字の頻度に基づいて降順に並べ替えます。次に例を示します。
| sortCharByFrequency.cpp |
自分自身を除く配列の積。 n 個の整数の配列 (n > 1) を指定すると、nums は、output[i] が nums[i] を除く nums のすべての要素の積と等しくなるような配列出力を返します。 | product_excel_self.cpp |
ソートされた配列を指定すると、その場所で重複を削除し、新しい長さを返します。一意の要素サイズを超えて配列内に何があるかは関係ありません。 O(1) のスペースと O(n) の時間の計算量が予想されます。 | 重複の削除.cpp |
グリッド内の島の数を数えます。 1 を陸地、0 を水域として表すグリッドを指定して、島の数を決定します (詳細は問題のコメントで) | count_islands.cpp |
データ ストリームから中央値を見つけます。ストリームに数値を追加する addNum と、これまでに確認された現在の数値の中央値を返す findMedian をサポートするデータ構造を設計します。また、数値のカウントが偶数の場合は、中央の 2 つの要素の平均を返し、それ以外の場合は中央値を返します。 | メディアン_ストリーム.cpp |
入力文字列を有効にするために、最小数の無効な括弧を削除してください。考えられるすべての結果を返します。注:入力文字列には、括弧(および)以外の文字が含まれている場合があります | remove_invalid_parenthesis.cpp |
配列と値が与えられた場合、その値のすべてのインスタンスを削除して、新しい長さを返します。別の配列に余分なスペースを割り当てないでください。O(1)余分なメモリを使用して入力配列を内側に変更してこれを行う必要があります。要素の順序を変更できます。新しい長さを超えて何を離れるかは関係ありません。 | remove_element.cpp |
2つのベクトルが相互作用の結果を見つけると、2つの配列/ベクトルの交差点を見つけます。結果は一意の文字のみを含む必要があり、任意の順序であることができます | Intersection_of_array.cpp |
パターンと弦のstrが与えられた場合、STRが同じパターンに従っているかどうかを見つけます。ここでは、パターンの文字とSTRの空でない単語の間に偏見があるように、完全な一致を意味します。例: | |
pattern = "abba"、str = "犬猫の犬"はtrueを返すはずです。 | |
pattern = "abba"、str = "犬猫の魚"はfalseを返すはずです。 | |
pattern = "aaaa"、str = "dog cat dog"はfalseを返す必要があります。 | |
pattern = "abba"、str = "犬の犬の犬"は虚偽を返すはずです。 | word_pattern.cpp |
あなたは数字のベクトルが提供され、そこでは各数値が表します | |
ITH日の株価の価格。完了することのみが許可されている場合 | |
1日に1つのトランザクション(つまり、1つを購入して1つの在庫を販売します)、デザイン | |
最大利益を見つけるためのアルゴリズム。 | best_time_to_buy_sell.cpp |
文が与えられた場合、文章内の各単語内の文字の順序を逆転させながら、空間と初期の語順を保持します。 | |
例: | |
入力:彼女はチョコレートが大好きです | |
出力:EHS SEVOL ETALOCOHC | reverse_words.cpp |