LC アルゴリズムの質問: ダブル ポインター

345. 文字列内の母音を反転する
文字列を入力として受け取り、その文字列内の母音を反転する関数を作成します。

825. 年齢相応の友人
ソーシャル メディア サイトには n 人のユーザーがいます。整数配列 age が与えられます。ages[i] は i 番目のユーザーの年齢です。
次の条件のいずれかが true の場合、ユーザー x はユーザー y (x != y) に友達リクエストを送信しません:
age[y] <= 0.5 * age[x] + 7
age[y] > age[x] ]
age[y] > 100 && age[x] < 100
それ以外の場合、x は y に友達リクエストを送信します。
x が y に友達リクエストを送信する場合、y も x に友達リクエストを送信する必要がないことに注意してください。さらに、ユーザーは自分自身に友達リクエストを送信しません。
このソーシャル メディア サイトで生成された友達リクエストの合計数を返します。

436. 適切な間隔を見つける
間隔配列 Interval が与えられ、interval[i] = [starti, endi] となり、各 starti は異なります。
区間 i の右側の区間は区間 j として記録でき、startj >= endi を満たし、startj が最小化されます。
各区間 i の右区間の最小開始位置からなる配列を返します。間隔 i に対応する右側の間隔がない場合、添字 i の値は -1 に設定されます。

一般に、ダブル ポインタの使用は二等分に関連するため、二等分が可能な場合にのみダブル ポインタを使用してください。
この質問では、2 つのエンドポイントの start と end をそれぞれ 2 つの配列に格納し、並べ替えることができます。各開始点をトラバースするとき、終点をトラバースするためのポインタ j は右へのみ移動するため、時間の複雑さが軽減されます。また、結果は添字であるため、これら 2 つの配列には位置情報を格納する必要があることにも注意してください。

インタビューの質問 17.11. 単語の距離
単語を含む大きなテキスト ファイルがあります。2 つの異なる単語が与えられた場合、ファイル内の 2 つの単語間の最短距離 (分離されている単語の数) を見つけます。このファイル内で検索プロセスが複数回繰り返され、毎回異なる単語が検索される場合、これを最適化できますか?

方法: 最適化が考慮されていない場合は、ダブル ポインターを直接使用してシミュレーションを最適化できます。トラバーサル中、2 つのポインターは 2 つの単語の最新の位置を指します。これは、前の位置では最短距離が表示されないためです。たとえば、次のようになります。 Student the Student a, traverse A に到達すると、index2 は 2 番目の生徒を指し、index1 は最初の a を指します。最初の生徒と最初の a から最短距離は導出されないことがわかります。したがって、ポインターを 2 つだけ使用して、倍の O(1) 複雑さで導出されます。

考えてみれば、map を使用して各単語の出現位置の順序集合を記憶し、2 つの単語の順序集合に二重ポインタを作成します (2 つの順序配列をマージするのと同じです)。

おすすめ

転載: blog.csdn.net/weixin_45719581/article/details/119793506