pseudoyu

pseudoyu

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

LeetCode 刷題常用資料結構(Java 篇)

前言#

最近開始刷 LeetCode 算法題,針對工作需求的算法刷題其實主要是鍛鍊解決問題的思路和程式碼撰寫能力,而不是像算法競賽那樣用複雜的資料結構,所以常用的資料結構和操作並不多,熟練使用也能很好地提升自己的程式碼品質,特此做一個整理,以便於查閱。

資料結構#

陣列 []#

初始化#

// 初始化一個大小為10,預設值為0的陣列
int[] nums = new int[10];

// 初始化一個二維boolean陣列
boolean[][] visited = new boolean[5][10];

常用方法#

// 函數開頭一般要做一個非空檢查,然後用索引下標訪問元素
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<>();

常用方法#

// 判斷是否存在Key
boolean containsKey(Object key)

// 獲取Key的對應Value,如果不存在則返回null
V get(Object key)

// 獲取Key的對應Value,如果不存在則返回null
V getOrDefault(Object key, V defaultValue)

// 將Key和Value存入哈希表
V put(K key, V value)

// 將Key和Value存入哈希表,如果存在,則什麼都不做
V putIfAbsent(K key, V value)

// 刪除鍵值對並返回值
V remove(Object key)

// 獲取哈希表中所有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 的算法小抄
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。