pseudoyu

pseudoyu

Blockchain | Programming | Photography | Boyi
github
twitter
telegram
mastodon
bilibili
jike

LeetCode 刷题常用データ構造(Java 篇)

前言#

最近、LeetCode のアルゴリズム問題を解いています。仕事の要件に基づいたアルゴリズム問題の解決方法やコードの作成能力を鍛えることが主な目的であり、アルゴリズム競技のように複雑なデータ構造を使用するわけではありません。したがって、よく使用されるデータ構造と操作はそれほど多くありませんが、熟練すれば自分のコードの品質を向上させることができます。そのため、整理して参照しやすくするためにまとめてみました。

データ構造#

配列 []#

初期化#

// サイズが10で、デフォルト値が0の配列を初期化する
int[] nums = new int[10];

// 2次元のboolean配列を初期化する
boolean[][] visited = new boolean[5][10];

よく使用されるメソッド#

// 関数の先頭では通常、nullチェックを行い、インデックスを使用して要素にアクセスする
if (nums.length == 0) {
    return;
}

for (int i = 0; i < nums.length; i++) {
    // num[i]にアクセスする
}

文字列 String#

初期化#

String s1 = "hello world";

文字列へのアクセス#

// Stringでは[]を使用して文字に直接アクセスすることはできません
char c = s1.charAt(2);

文字列の変更#

// Stringでは文字列を直接変更することはできず、char[]型に変換してから変更する必要があります
char[] chars = s1.toCharArray();
chars[1] = 'a';
String s2 = new String(chars);

文字列の比較#

// 等しいかどうかを判断するには、equalsメソッドを使用する必要があります。==を直接使用することはできません
if (s1.equals(s2)) {
    // 等しい
} else {
    // 等しくない
}

文字列の連結#

// +を使用して直接連結することはできますが、効率は良くありません
String s3 = s1 + "!";

頻繁な文字列連結には StringBuilder を使用して効率を向上させる#

StringBuilder sb = new StringBuilder();

for (char c = 'a'; c <= 'f'; c++) {
    // appendメソッドは、文字、文字列、数字などの型を連結することができます
    sb.append(c);
    String result = sb.toString();
}

動的配列 ArrayList#

初期化#

// String型の動的配列を初期化する
ArrayList<String> strings = new ArrayList<>();

// int型の動的配列を初期化する
ArrayList<Integer> nums = new ArrayList<>();

よく使用されるメソッド#

// 空かどうかを判断する
boolean isEmpty()

// 要素の数を返す
int size()

// インデックスの要素にアクセスする
E get(int index)

// 末尾に要素を追加する
boolean add(E e)

双方向リンクリスト LinkedList#

初期化#

// String型の双方向リンクリストを初期化する
LinkedList<String> strings = new LinkedList<>();

// int型の双方向リンクリストを初期化する
LinkedList<Integer> nums = new LinkedList<>();

よく使用されるメソッド#

// 空かどうかを判断する
boolean isEmpty()

// 要素の数を返す
int size()

// 末尾に要素を追加する
boolean add(E e)

// 末尾の要素を削除して返す
E removeLast()

// 先頭に要素を追加する
void addFirst(E e)

// 先頭の要素を削除して返す
E removeFirst()

ハッシュマップ HashMap#

初期化#

// 整数を文字列にマッピングするハッシュマップを初期化する
HashMap<Integer, String> map = new HashMap<>();

// 文字列を配列にマッピングするハッシュマップを初期化する
HashMap<String, int[]> map = new HashMap<>();

よく使用されるメソッド#

// キーが存在するかどうかを判断する
boolean containsKey(Object key)

// キーに対応する値を取得する。存在しない場合はnullを返す
V get(Object key)

// キーに対応する値を取得する。存在しない場合はデフォルト値を返す
V getOrDefault(Object key, V defaultValue)

// キーと値をハッシュマップに保存する
V put(K key, V value)

// キーと値をハッシュマップに保存する。既に存在する場合は何もしない
V putIfAbsent(K key, V value)

// キーと値のペアを削除して値を返す
V remove(Object key)

// ハッシュマップのすべてのキーを取得する
Set<K> keySet()

キュー Queue#

初期化#

// JavaのQueueはインターフェースです
// Stringを格納するキューを初期化する
Queue<String> q = new LinkedList<>();

よく使用されるメソッド#

// 空かどうかを判断する
boolean isEmpty()

// 要素の数を返す
int size()

// 先頭の要素を返す
E peek()

// 先頭の要素を削除して返す
E poll()

// 末尾に要素を挿入する
boolean offer(E e)

スタック Stack#

初期化#

// int型のスタックを初期化する
Stack<Integer> s = new Stack<>();

よく使用されるメソッド#

// 空かどうかを判断する
boolean isEmpty()

// 要素の数を返す
int size()

// 要素をスタックのトップにプッシュする
E push(E e)

// スタックのトップの要素を返す
E peek()

// スタックのトップの要素を削除して返す
E pop()

結論#

問題を解く道は長いですが、頑張ってください!

参考資料#

  1. LeetCode 公式ウェブサイト
  2. labuladong のアルゴリズム小抄
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。