ただし、フロントエンドでアルゴリズムに触れる機会はほとんどありません。ほとんどがインタラクティブな操作ですが、大手企業のインタビューから判断すると、アルゴリズムは依然として評価の一側面となっています。実際、データ構造とアルゴリズムを学ぶことは、エンジニアが問題を理解し分析するのに役立ちます。将来、より複雑な問題に直面した場合、これらの基本的な知識を蓄積することで、解決策をより最適化できるようになります。フロントエンドの面接でよく聞かれる質問をいくつか紹介します。 Q1 単語が回文であるかどうかを判断するにはどうすればいいですか? 回文とは、同じ単語や文が次のテキストで入れ替わったり逆になったりして、ループ効果を生み出す文です。これを回文またはループと呼びます。たとえば、mamam redivider などです。 多くの人がこのような質問を受けたとき、 for を使用して文字列のアルファベット順を逆にしてから一致させることを簡単に思いつくでしょう。実は、検討すべき重要な点は、リバースの実装です。実際、既製の関数を使用して文字列を配列に変換できます。このアイデアは非常に重要です。文字列操作をより自由に実行できるようになります。
Q2 整数配列から重複した値を削除する たとえば、次のように入力します: [1,13,24,11,11,14,1,2] 出力: [1,13,24,11,14,2] 繰り返される要素 11 と 1 を削除する必要があります。 この質問は、フロントエンドの面接の多くの質問に出てきます。主に、オブジェクトの使用とスクリーニングのためのキーの使用を調べます。
Q3 文字列内の最も一般的な文字を数える 連続した英語の文字列が与えられたとき、最も多く出現する文字を見つけます。 入力: afjghdfraaaasdenas 出力: 繰り返し回数を数えるには、先ほど登場した繰り返し回数を計算するアルゴリズムが必要になります。
Q4 ソートアルゴリズム アルゴリズムに関する質問を受けた場合、そのほとんどは比較的オープンな質問であるはずです。アルゴリズムの実装を制限するものではありませんが、いくつかのアルゴリズムを習得する必要があります。したがって、比較的基本的で理解しやすく、記憶しやすいアルゴリズムであるバブルソートは、必ず記憶する必要があります。バブルソートアルゴリズムは、サイズを順番に比較し、小さい方と大きい方の位置を交換します。
バブルソート以外にも、挿入ソート、クイックソート、シェルソートなど、実は他にもたくさんのソートが存在します。各ソートアルゴリズムには独自の特性があります。すべてを習得する必要はありませんが、いくつかのアルゴリズムに精通している必要があります。 たとえば、クイックソートは非常に効率的で、その基本原理は図のとおりです (wiki より)。 このアルゴリズムは、特定の要素の値を参照し、それより小さい値を左の配列に、それより大きい要素を右の配列に格納し、左の配列と右の配列に対して最後の操作を再帰的に実行し、マージされた配列、つまりソートされた配列を返します。
皆さんに学習リンクを紹介し、アニメーションを通じてアルゴリズムの実装を実演したいと思います。 HTML5 Canvas デモ: ソートアルゴリズム (http://math.hws.edu/eck/jsdemo/sortlab.html) Q5 一時変数を使わずに2つの整数を交換する 入力 a = 2、b = 4 出力 a = 4、b = 2 このタイプの質問は非常に巧妙で、通常の方法から離れて考え、a と b を代入して使用する必要があります。 主に + – を使用して計算を実行します。たとえば、a = a + ( b – a) は実際には *** の a = b と同等です。
Q6 キャンバスを使用して有限フィボナッチ数列曲線を描くにはどうすればよいでしょうか? シーケンスの長さは 9 に制限されます。 フィボナッチ数列は黄金比数列とも呼ばれ、0、1、1、2、3、5、8、13、21、34、... のような数列を指します。数学では、フィボナッチ数列は主に再帰呼び出しを調べます。定義は一般的に知られている
フィボナッチ配列を生成する方法
残りの作業は、キャンバスアーク法を使用して曲線を描くことです。 デモ (http://codepen.io/Jack_Pu/pen/LRaxZB) Q7 たとえば、次の正の配列の *** 差を求めます。 入力[10,5,11,7,8,9] 出力6 これは、基本配列の最大値の検索をテストする質問です。明らかに、最大差は配列内の最大値と最小値の差でなければならないことはわかっています。
Q8 指定された長さの文字列をランダムに生成する 指定された長さの文字列をランダムに生成するアルゴリズムを実装します。 例えば、長さが8の場合、出力は4ldkfg9jとなる。
Q9 getElementsByClassNameに似た関数を実装する 特定のクラスを含む特定の DOM ノードの下にあるすべての DOM ノードを検索する関数を自分で実装しますか? ネイティブ システムによって提供される getElementsByClassName querySelectorAll などのネイティブ DOM 検索関数を使用することはできません。
Q10 JSを使用して二分探索木を実装する 一般的に言えば、タスク全体を完了する可能性は比較的低いですが、タスクの理解といくつかの基本機能の実装に重点が置かれます。 バイナリ検索ツリーは、バイナリ検索ツリーまたは順序付きバイナリツリーとも呼ばれ、次のプロパティを持つ空のツリーまたはバイナリツリーです。
記述する際には、二分探索木の特性を十分に理解し、各ノードのデータ構造を最初に設定する必要があります。
ツリーは、ルートノードから各子ノードへと段階的に拡張されるノードで構成されているため、ルートノードと、ノードの追加、検索、削除のメソッドを持つのが基本的な構造です。
完全なコード Github (https://github.com/JackPu/JavaScript-Algorithm-Learning) さらに読む https://www.interviewcake.com/question/javascript/rectangular-love http://stackoverflow.com/questions/21853967/get-elements-by-class-a-or-b-in-javascript http://codepen.io/Jack_Pu/pen/EgrXBp http://javascript-html5-tutorial.com/javascript でのアルゴリズムとデータ構造.html |
<<: ディープラーニングツール: TensorFlow と NLP モデル
>>: ディープラーニングとディープクローニング: チャットボットにとってより優れたソリューションはどちらでしょうか?
ここでは、テクノロジーの進歩に合わせて AI を使用して、より発展し、より強力になる Web サイト...
GenAI は多くの企業の IT プロジェクトで引き続き主流を占めており、ビジネス リーダーの 3 ...
消費者は、利便性、安全性、ユーザーエクスペリエンスを向上させる進歩を飽くなき欲求で求めています。ヒュ...
7月31日、「ハッカーがAIを使って犯罪ツールを作る」という研究者の懸念が徐々に現実のものとなりつつ...
研究によると、人工知能は強力に聞こえますが、現在の高度な人工知能は、人間の 4 歳児が簡単に解決でき...
[[338562]] 【51CTO.comオリジナル記事】 1 はじめに前回の記事では、ディープラー...
ロボットの皮膚、空気圧触覚手袋... Meta は将来のメタバースに、よりリアルな触覚インタラクショ...
この記事では、AR/VR テクノロジーがロボットにどのように貢献し、工場や産業にどのようなメリットを...
急速に進化する今日のテクノロジーの世界では、「人工知能」、「機械学習」、「アルゴリズム」などの用語が...
【51CTO.comオリジナル記事】 [[193891]] 人工知能は、1956 年のダートマス会...