-
Pythonの逆リンクリスト
リンクリストがあるとすると、それを逆にする必要があります。したがって、リストが1→3→5→7のような場合、新しい反転リストは7→5→3→1になります。 これを解決するために、このアプローチに従います- (head、back)を解決するために再帰的な方法でリストの反転を実行する1つの手順を定義します 頭がない場合は、頭を戻します temp:=head.next head.next:=back 戻る=頭 温度が空の場合は、ヘッドを戻します head =temp returnsolve(頭、後ろ) 例 理解を深めるために、次の実装を見てみましょう- class ListNode
-
Pythonで複製が含まれています
番号のリストがあるとします。リストに重複する要素が含まれているかどうかを確認する必要があります。したがって、リストが[1,5,6,2,1,3]の場合、2つの1があるため、1が返されますが、リストが[1,2,3,4]の場合、次のようになります。重複が存在しないため、false。 これを解決するために、このアプローチに従います- セットのデータ構造は一意のデータのみを保持することがわかっています。ただし、リストは重複するコンテンツを折りたたむことができます。したがって、リストをセットに変換すると、重複する要素がある場合はサイズが小さくなり、長さを一致させることでこの問題を解決できます。 例 理
-
Pythonで二分木を反転する
二分木があるとします。私たちの仕事は、逆二分木を作成することです。したがって、ツリーが以下のようになっている場合- 反転したツリーは次のようになります これを解決するために、再帰的アプローチを使用します ルートがnullの場合は、戻ります 左右のポインタを入れ替える 左のサブツリーと右のサブツリーを再帰的に解決します 例(Python) 理解を深めるために、次の実装を見てみましょう- class TreeNode: def __init__(self, data, left = None, right = None):
-
Pythonでリンクリストのノードを削除する
いくつかの要素を持つリンクリストがあるとします。私たちのタスクは、リストから特定のノードを削除する関数を作成することです。したがって、リストが1→3→5→7→9のようで、3を削除すると、1→5→7→9になります。 削除するノードを指すポインタ「ノード」があるとすると、ノードを削除するにはこれらの操作を実行する必要があります- node.val =node.next.val node.next =node.next.next 例(Python) 理解を深めるために、次の実装を見てみましょう- class ListNode: def __init__(se
-
Pythonで有効なアナグラム
アナグラムは基本的に、特定の文字列またはパターンのすべての順列です。このパターン検索アルゴリズムは少し異なります。この場合、正確なパターンが検索されるだけでなく、テキスト内の指定されたパターンのすべての可能な配置が検索されます。したがって、入力が「ANAGRAM」と「NAAGARM」の場合、それらはアナグラムですが、「cat」と「fat」はアナグラムではありません これを解決するために、文字列を文字のリストに変換してから並べ替えます。並べ替えられた2つのリストが同じ場合は、アナグラムです。 例(Python) 理解を深めるために、次の実装を見てみましょう- class Solution(o
-
Pythonで番号がありません
0からnまでの数字のリストがあるとします。欠落している番号が1つあります。効率的なアプローチで不足している番号を見つける必要があります。したがって、A =[0、1、2、3、4、5、7、8、9]の場合、欠落している数は6です。 これを解決するために、二分探索アプローチを使用します。 リストを昇順で並べ替える 高=Aの長さ、低=0 低い<高い間、実行する 中=低+(高–低)/ 2 mid 高=中 それ以外の場合 低=中+1 低く戻す 例 理解を深めるために、次の実装を見てみましょう- class Solution(object): def mi
-
Pythonでゼロを移動する
いくつかの数値を保持する配列があるとします。ゼロ以外の値とゼロ値があります。したがって、他の数値の相対的な順序を変更せずに、すべてゼロを右側に送信する必要があります。したがって、配列が[0、1、5、0、3、8、0、0、9]のような場合、最終的な配列は[1、5、3、8、9、0、0、0、0になります。 ] これを解決するには、次の手順に従います- インデックス=0と仮定します for i=0からAの長さ A [i]!=0の場合、 A [インデックス]:=A [i] index:=index + 1 for i=Aの長さのインデックス A [i] =0 例 理
-
Pythonの3の力
番号nがあるとします。数が3の累乗であるかどうかを確認する必要があります。したがって、数値がn =27、つまり3の累乗のような場合、結果はtrueになり、n =15の場合、falseになります。 これを解決するには、次の手順に従います- これを解決するために対数を使用します [log10(n)/ log10(3)] mod 1 ==0の場合、3の累乗になります。それ以外の場合は、そうではありません 例 理解を深めるために、次の実装を見てみましょう- class Solution(object): def isPowerOfThree(self, n): &n
-
Pythonで文字列を逆にする
文字の配列があるとします。追加のスペースを使用せずに文字列を反転する必要があります。したがって、文字列が[H、E、L、L、O]のような場合、出力は[O、L、L、E、 H] これを解決するには、次の手順に従います- 2つのポインタを使用して、開始=0および終了=文字列の長さ– 1 最初と最後の文字を入れ替える 開始を1増やし、終了を1減らします 例 理解を深めるために、次の実装を見てみましょう- class Solution(object): def reverseString(self, s): "&q
-
Pythonの2つの整数の合計
2つの整数aとbがあるとします。私たちの仕事は、これら2つの整数の合計を見つけることです。 1つの制約は、+や-のような演算子は使用できないということです。したがって、a=5およびb=7の場合、結果は12になります。 これを解決するには、次の手順に従います- 解決には、ビット単位の論理演算子を使用します b =0の場合、aを返します それ以外の場合は、XOR bを指定して合計関数を再帰的に使用し、結果を1回左シフトした後にANDbを使用します 例(Python) 理解を深めるために、次の実装を見てみましょう- #include <iostream> using names
-
Pythonの文字列の最初の一意の文字
文字列があり、文字列内の最初の一意の文字を検索する必要があるとします。したがって、文字列が「人」のようなものである場合、出現する最初の文字は「o」です。したがって、インデックスが返されます。ここでは2です。そのような文字がない場合は、-1を返します。 これを解決するには、次の手順に従います- 1つの頻度マップを作成する 文字列内の文字cごとに、を実行します。 cが頻度にない場合は、それを頻度に挿入し、値1を入力します それ以外の場合は、頻度のカウントを増やします 頻度マップをスキャンします。特定のキーの値が1の場合はそのキーを返し、そうでない場合は-1を返します。 例 理解を深め
-
PythonのFizzBuzz
数nがあるとします。 1からnまでのすべての数値の文字列表現を表示する必要がありますが、いくつかの制約があります。 数値が3で割り切れる場合は、数値の代わりにFizzと記入してください 数値が5で割り切れる場合は、数値の代わりにバズを記入してください 数値が3と5の両方で割り切れる場合は、数値の代わりにFizzBuzzを記述します これを解決するには、次の手順に従います- 1からnまでのすべての数値について、 数値が3と5の両方で割り切れる場合は、「FizzBuzz」と印刷します それ以外の場合、数値が3で割り切れる場合は、「Fizz」と印刷します それ以外の場合、数値が5で
-
Pythonでのハミング距離
2つの整数があると考えてください。それらのハミング距離を見つける必要があります。ハミング距離は、2つの数値間のビット数が異なるビット数です。したがって、数値が7と15の場合、2進数で0111と1111になります。ここでは、MSbが異なるため、ハミング距離は1です。 これを解決するには、次の手順に従います- i=31から0まで b1 =xの右シフト(i AND 1回) b2 =yの右シフト(i AND 1回) b1 =b2の場合、答え:=回答+ 0、それ以外の場合、回答:=回答+1 回答を返す 例 理解を深めるために、次の実装を見てみましょう- class Solution
-
Pythonのリンクリストサイクル
リンクリストがあり、サイクルがあるかどうかを確認する必要があるとします。指定されたリンクリストでサイクルを表すために、posと呼ばれる1つの整数ポインターを使用します。この位置は、テールが接続されているリンクリスト内の位置を表します。したがって、posが-1の場合、リンクリストにサイクルは存在しません。たとえば、リンクリストは[5、3、2、0、-4、7]のようで、pos =1です。したがって、サイクルがあり、テールは2番目のノードに接続されます。 これを解決するには、次の手順に従います- 1つのセットをハッシュセットHとして取得します ヘッドがnullでない場合- ヘッドがHにある場合は、
-
Pythonの最小スタック
ここでは、一定時間で最小要素をプッシュ、ポップ、トップ、および取得できるスタックを作成する方法を説明します。したがって、関数はpush(x)、pop()、top()、getMin()になります。 これを解決するには、次の手順に従います- スタックを最小要素で無限大として初期化します プッシュ操作の場合push(x) x
-
Pythonでの2つのリンクリストの交差
2つのリンクリストAとBがあるとすると、これらのリンクリストにはいくつかの要素があります。交点の参照を返す必要があります。入力はintersectionVal=8、A =[4,1,8,4,5]、B =[5,0,1,8,4,5]、skipA =2、skipB =3で、これらはスキップするために使用されますAから2つの要素、Bから3つの要素をスキップします。 これを解決するには、次の手順に従います- dというマップを定義する headAがnullではない場合 d [headA]:=1 headA:=headAの次 headBがnullではない場合 dのheadBの場合 ヘッドBを返す
-
C++のリバースビット
符号なし数値xが1つあり、その2進表現(32ビット符号なし整数)を簡単に見つけることができるとします。私たちの仕事はビットを逆にすることです。したがって、バイナリ表現が00000000000000000000001001110100のような場合、反転されたビットは00101110010000000000000000000000になります。したがって、ビットを反転した後に実際の数値を返す必要があります これを解決するには、次の手順に従います- nが指定された数であると仮定します 答えましょう:=0 for i:=31から0: answer:=Answer OR(n AND i)、そして
-
Pythonのハッピー数
ここでは、nが1つのハッピー数であるかどうかを検出する方法を説明します。したがって、ハッピー数は数値であり、正の整数で始まり、数値をその桁の2乗の合計に置き換えます。このプロセスは、1になるまで繰り返されます。それ以外の場合は、サイクルで無限にループします。これらの数字は、1が見つかったときに、ハッピー数になります。 数値が19であるとすると、数値はハッピー数であるため、出力はtrueになります。 19からわかるように、次のようになります 1 2 + 9 2 =82 8 2 + 2 2 =68 6 2 + 8 2 =100 1 2 + 0 2 +
-
Pythonのバイナリ検索ツリーの最も低い共通の祖先
二分探索木があるとします。与えられた2つのノードの中で最も低い共通の祖先ノードを見つける必要があります。 2つのノードpとqのLCAは、実際には、pとqの両方を子孫として持つツリーの最下位ノードです。したがって、二分木が[6、2、8、0、4、7、9、null、null、3、5]のような場合。ツリーは次のようになります- ここで、2と8のLCAは6です これを解決するには、次の手順に従います- ツリーが空の場合は、nullを返します pとqの両方がrootと同じ場合は、rootを返します left:=pとqを使用したルートの左側のサブツリーのLCA right:=pとqを使用し
-
Pythonの最初の悪いバージョン
ある会社で、ある製品マネージャーが新製品を開発するチームを率いているとします。最新バージョンが品質チェックに失敗したとします。各バージョンは前のバージョンに基づいて開発されているため、不良バージョン以降のすべてのバージョンが不良になります。したがって、n個の要素[1、2、…n]を持つ配列Aがあり、この配列から最初の不良バージョンを見つける必要があります。 関数isBadVersion(version_id)があるとすると、これはバージョンが悪いかどうかを返します。たとえば、n =5で、バージョン=4が最初の不良バージョンであるとします。したがって、isBadVersion(3)がfalseを