刷题总结 - 数据结构篇

算法 刷题 找工

目录


不论是代码笔试,还是代码层面的技术面试,其核心无非是:数据结构和算法

在我的理解中,数据结构像是工具箱里的各种工具,而算法则是解决问题的流程。完成任务的效率和准确性取决于程序员选择使用的工具(数据结构)。

因此,在总结常见算法之前,我们需要先熟悉这些工具🔧。选对工具,才能顺利高效地完成特定任务。

在准备笔试/面试的学习过程中(也是 CS 入门课程的基础),我总结了七类常见的数据结构:

  1. Arrays
  2. Stacks
  3. Queues
  4. Linked Lists
  5. Trees
  6. Graphs
  7. Hash Tables

基本上,对于 SDE 入门级别的笔试/面试,这七种数据结构已足够覆盖。

以下是我对这些数据结构的特性和常见使用场景的总结,同时附上相关的 Leetcode 题目。这些题目大多来自 Neetcode 150 和 Blind 75。


Arrays

首先是 Arrays,这是编程入门时最基础的数据结构,同时也是最常使用的数据结构。 可以将 Arrays 理解为编程中的基础存储工具。在 Java 中,数组在初始化后,其数据类型和长度是固定的,不能更改。


Stacks

Stack 是一种线性数据结构(即数据遵循线性/顺序存储原则)。Stack 的特性是后进先出(LIFO)。

Monotonic Stack

Monotonic Stack(单调栈)是 Stack 的特性下的一种特定状态,主要分为两种:

  1. Monotonic Increasing Stack:栈内元素从小到大排列。
  2. Monotonic Decreasing Stack:栈内元素从大到小排列。

根据 Geeks for Geeks 的定义,Monotonic Stack 是一种用于辅助解决算法问题的特殊数据结构,我个人比较认可这个定义。 此外,还有两种变种:

  • Monotonic Non-Increasing Stack(伪单调递减栈)
  • Monotonic Non-Decreasing Stack(伪单调递增栈)

它们的区别在于,伪单调栈允许相等元素存在,而不是严格递增或递减。更多细节参考 Leetcode 论坛:Comprehensive Guide on Monotonic Stack

Leetcode 相应题目:

  1. Valid Parentheses
  2. Daily Temperatures (Monotonic Increasing Stack)
  3. Min Stack
  4. Largeest Rectangle in Histogram

Stack 的操作及时间复杂度

操作说明时间复杂度
pop()移除栈顶元素O(1)
push()向栈中加入元素O(1)
peek()返回栈顶元素O(1)

Queues

(待补充)


Linked Lists

(待补充)


Trees

(待补充)


Graphs

(待补充)


Hash Tables

(待补充)