SQLはLeetCodeを実装します(180.連続した数字)

SQLはLeetCodeを実装します(180.連続した数字)

[LeetCode] 180. 連続した数字

少なくとも 3 回連続して出現するすべての数字を検索する SQL クエリを記述します。

+----+-----+
| ID | 番号 |
+----+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 2 |
| 7 | 2 |
+----+-----+

たとえば、上記の Logs テーブルでは、少なくとも 3 回連続して出現する数字は 1 だけです。

この問題では、Logs テーブルが提供され、Num 列に同じ数字が 3 回連続して出現する数字を見つけるように求められます。同じ数字を 3 回見つける必要があるため、3 つのテーブル インスタンスを作成する必要があります。l1 を使用して、それぞれ l2 および l3 と交差し、l1 の次の位置と l2 の Id を比較し、l1 と l3 の次の 2 つの位置を比較して、同じ Num を持つ数字を返します。

解決策1:

SELECT DISTINCT l1.Num FROM Logs l1
JOIN ログ l2 ON l1.Id = l2.Id - 1
JOIN ログ l3 ON l1.Id = l3.Id - 2
ここで、l1.Num = l2.Num かつ l2.Num = l3.Num;

次のメソッドは Join を使用せず、3 つのテーブルのインスタンス内を直接検索し、4 つの条件を制限して正しい結果を返します。

解決策2:

Logs l1、Logs l2、Logs l3 から DISTINCT l1.Num を選択
ここで、l1.Id = l2.Id - 1 かつ l2.Id = l3.Id - 1
かつ、l1.Num = l2.Num かつ、l2.Num = l3.Num;

まったく異なる方法を見てみましょう。変数 count と pre が使用され、それぞれ 0 と -1 に初期化されます。次に、IF 文が使用されていることに注意してください。MySQL の IF 文は、私たちがよく知っている他の言語の if 文とは異なります。これは、おなじみの三項演算子 a?b:c に相当します。a が true の場合は b を返し、そうでない場合は c を返します。それでは、まず Num 列の最初の数字 1 を見てみましょう。pre は現在の Num とは異なる -1 に初期化されているため、この時点で count には 1 が割り当てられ、この時点で pre には 1 が割り当てられます。次に、Num 列の 2 番目の 1 が入り、この時点で pre は Num と同じです。count は 1 増加します。Num 列の 3 番目の 1 が入ると、count は 3 に増加します。この時点で、where 条件が満たされ、tn >= 3 であるため、1 が選択されます。このようにして、Num 全体を走査して最終結果を取得します。

解決策3:

SELECT DISTINCT 数値 FROM (
SELECT Num, @count := IF(@pre = Num, @count + 1, 1) AS n, @pre := Num
ログから、(SELECT @count := 0, @pre := -1) AS init
) AS t ここで tn >= 3;

参考文献:

https://leetcode.com/discuss/54463/シンプルソリューション

https://leetcode.com/discuss/87854/simple-sql-with-join-1484-ms

https://leetcode.com/discuss/69767/two-solutions-inner-join-and-two-variables

これで、LeetCode (180. 連続数) の SQL 実装に関するこの記事は終了です。 連続数の SQL 実装に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • LeetCode の SQL 実装 (196. 重複するメールボックスを削除する)
  • SQL 実装 LeetCode (185. 部門内で最も給与の高い上位 3 名)
  • LeetCode の SQL 実装 (184. 部門内で最も高い給与)
  • LeetCode の SQL 実装 (183. 注文をしたことがない顧客)
  • LeetCode の SQL 実装 (182. 重複するメールボックス)
  • LeetCode の SQL 実装 (181. 従業員は管理職よりも収入が高い)
  • LeetCode の C++ 実装 (組み合わせの最大数は 179)
  • LeetCode の SQL 実装 (197. 気温上昇)

<<:  Pengyou.com モバイル クライアントのダウンロード ページのデザイン共有 (画像とテキスト)

>>:  JS 4つの楽しいハッカー背景効果コードを共有する

推薦する

ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

目次1. 基本原則2. 特定のコード要約する1. 基本原則まず、生放送エリアを10の部分に分割し(個...

MySQLでユーザーを作成し、権限を管理する方法

1. ユーザーとパスワードの作成方法1. MySQLデータベースに入る mysql> mysq...

通知メッセージカルーセルを実装するための CSS3 トランジション

Vueバージョンをファイルにコピーして使用します <テンプレート> <!-- カル...

虫眼鏡の詳細のJavaScript実装

目次1. レンダリング2. 実施原則3. まとめ1. レンダリング 2. 実施原則幅と高さが等しい拡...

キャンバスはスクラッチカード効果を描画します

この記事では、キャンバスでスクラッチカード効果を描画するための具体的なコードを参考までに共有します。...

VMware 仮想マシンで Linux の IP アドレスを表示する方法

1. まず、コンピュータのデスクトップにある VMware アイコンをダブルクリックしてソフトウェア...

Reactでコンポーネントロジックを共有する3つの方法

簡単に説明すると、これら 3 つの方法は、レンダリング プロップ、高階コンポーネント、カスタム フッ...

MySQL バッチ SQL 挿入パフォーマンス最適化の詳細な説明

大量のデータを扱うシステムの中には、クエリ効率の低さやデータの保存時間の長さといったデータベースの問...

ZFS とは何か? ZFS を使用する理由とその機能

ZFSの歴史Z ファイル システム (ZFS) は、2001 年に Matthew Ahrens と...

TypeScript の条件型に関する詳細な読書と実践記録

目次ジェネリック型での条件型の使用ツールタイプ脱出ポッド矢印関数で条件型を使用する型推論による条件型...

動的なデジタル時計を実装するJavaScript

この記事では、JavaScriptで動的なデジタル時計を実装するための具体的なコードを参考までに紹介...

HTMLおよびJSPページがキャッシュされ、Webサーバーから再取得されるのを防ぎます。

ユーザーがログアウトした後、ブラウザの戻るボタンがクリックされると、Web アプリケーションは保護さ...

mysql5.7.24 バージョンのインストール手順と解凍時に発生した問題の概要

1. ダウンロード参考: 2. D:\MySQL\mysql-5.7.24 などの固定の場所に解凍し...

Dockerはmysqldumpコマンドを使用してプロジェクト内のmysqlデータをバックアップおよびエクスポートします。

mysqldump コマンドはじめに: データベースバックアッププログラム形式: mysqldum...

React Hook の使用例 (一般的なフック 6 つ)

1. useState: 関数コンポーネントに状態を持たせる使用例: // カウンター impor...