前言#
最近、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()
結論#
問題を解く道は長いですが、頑張ってください!