自力で解決できるようになるまで LeetCode ソリューションを勉強した 19 日目: 問題 #83.ソート済みリストから重複を削除する (E/JS)


はじめに: 私は元会計士からソフトウェア エンジニアに転向し、2022 年 1 月にコーディング ブートキャンプを卒業しました.アルゴリズムとデータ構造は、現在、ほとんどのテック企業にとって面接の避けられない部分です.そして、私の友人の一人が、トップテック企業に入るためには60秒以内にミディアムリートコードの問題を解決する必要があると教えてくれました.

どの問題 (簡単な問題であっても) を解決する方法がわからないので、何時間も無駄にして、それを理解することができないと思いました.これが私のアプローチです:
  • リートコードの問題をランダムに選択するか、対象の企業からオンライン評価を選択します.
  • Youtube または LeetCode のディスカッション セクションから 1 ~ 2 のソリューションを学習します. 1 つのブルート フォース ソリューション、もう 1 つはより最適なソリューションです.
  • 詳細な説明をブログに投稿し、ソリューションをよりよく理解できるように口頭で説明します.
  • ソリューションを見ずに LeetCode でソリューションをコーディングする

  • 忘却曲線と戦う: 次の 3 日間、質問をやり直します.そして、定期的に戻って問題を再検討してください.



  • これは私の最初のリンク リストの問題です



    83.ソート済みリストから重複を削除するDifficulty: Easy Language: JavaScript
    並べ替えられたリンク リストの head を指定して、各要素が 1 回だけ表示されるようにすべての重複を削除します.リンクされたリストもソートして返します.

    例 1:


    Input: head = [1,1,2]
    Output: [1,2]
    


    例 2:


    Input: head = [1,1,2,3,3]
    Output: [1,2,3]
    


    制約:
  • リスト内のノード数は [0, 300] の範囲です.
  • -100 <= Node.val <= 100
  • リストは昇順でソートされることが保証されています.



  • 解決:

    var deleteDuplicates = function(head) {
        let current = head;
    
    //let current node equal to head and keep track of current node
    
        while(current !== null && current.next !== null){
    
    //while (note 1) current node and the next node exist, loop will
    //start and find the node that is not duplicated. If any of the
    //two condition (note 4) is null, the loop will break.
    
            if(current.val === current.next.val){
    
    //if current value of the node equal (note 2) to the next node
    
                current.next = current.next.next
    
    //skip over the next node to the node after that and starts next
    //loop
    
            } else {
                current = current.next
    
    //if not, move current to the next node and starts next loop
    
            }
        }
    
        return head
    
    //return the head will return the entire linked list.
    
    };
    


    2022 年 3 月 1 日時点のソリューション提出の詳細
    (毎日新しいテスト/提出があるため、以下のデータは異なる場合があります)
  • ランタイム: 91 ミリ秒
  • メモリ使用量: 41.9 MB



  • 参考文献:
    LeetCode Problem Link

    LeetCode Discussion: rickp
    Note 1: while statement
    Note 2: strictly equal (===)
    Note 3: if...else
    Note 4: Logical AND (&&)
    Blog Cover Image Credit