Hello 算法 1.2.0 java版Hello 演算法 Java 語言版 作者:靳宇棟(@krahets) 程式碼審閱:靳宇棟(@krahets) Release 1.2.0 2024‑12‑06 序 兩年前,我在力扣上分享了“劍指 Offer”系列題解,受到了許多讀者的鼓勵與支持。在與讀者交流期間,我 最常被問到的一個問題是“如何入門演算法”。漸漸地,我對這個問題產生了濃厚的興趣。 兩眼一抹黑地刷題似乎是最受歡迎的方 記錄。需要注意的是,Python 中 range(a, b) 對應的區間是“左閉右開”的,對應的走訪範圍為 𝑎, 𝑎 + 1, … , 𝑏 − 1 : // === File: iteration.java === /* for 迴圈 */ int forLoop(int n) { int res = 0; // 迴圈求和 1, 2, ..., n-1, n for (int i = 1; 迴圈中,程式每輪都會先檢查條件,如果條 件為真,則繼續執行,否則就結束迴圈。 下面我們用 while 迴圈來實現求和 1 + 2 + ⋯ + 𝑛 : // === File: iteration.java === /* while 迴圈 */ int whileLoop(int n) { int res = 0; int i = 1; // 初始化條件變數 // 迴圈求和 1, 2, .0 魔豆 | 379 页 | 18.79 MB | 11 月前3
Hello 算法 1.2.0 C++版𝑛)、𝑂(𝑛)、𝑂(𝑛2) 和 𝑂(2𝑛) 等。 2. Q & A Q:尾遞迴的空間複雜度是 𝑂(1) 嗎? 理論上,尾遞迴函式的空間複雜度可以最佳化至 𝑂(1) 。不過絕大多數程式語言(例如 Java、Python、C++、 Go、C# 等)不支持自動最佳化尾遞迴,因此通常認為空間複雜度是 𝑂(𝑛) 。 Q:函式和方法這兩個術語的區別是什麼? 函式(function)可以被獨立執行, ‧ C 語言是程序式程式設計語言,沒有物件導向的概念,所以只有函式。但我們可以透過建立結構體 (struct)來模擬物件導向程式設計,與結構體相關聯的函式就相當於其他程式語言中的方法。 ‧ Java 和 C# 是物件導向的程式語言,程式碼塊(方法)通常作為某個類別的一部分。靜態方法的行為類 似於函式,因為它被繫結在類別上,不能訪問特定的例項變數。 ‧ C++ 和 Python 既支持程序 位元組(byte)由 8 位元(bit)組成。 基本資料型別的取值範圍取決於其佔用的空間大小。下面以 Java 為例。 ‧ 整數型別 byte 佔用 1 位元組 = 8 位元,可以表示 28 個數字。 ‧ 整數型別 int 佔用 4 位元組 = 32 位元,可以表示 232 個數字。 表 3‑1 列舉了 Java 中各種基本資料型別的佔用空間、取值範圍和預設值。此表格無須死記硬背,大致理解即 可,需要時可以透過查表來回憶。0 魔豆 | 379 页 | 18.79 MB | 11 月前3
Hello 算法 1.2.0 swift版𝑛)、𝑂(𝑛)、𝑂(𝑛2) 和 𝑂(2𝑛) 等。 2. Q & A Q:尾递归的空间复杂度是 𝑂(1) 吗? 理论上,尾递归函数的空间复杂度可以优化至 𝑂(1) 。不过绝大多数编程语言(例如 Java、Python、C++、 Go、C# 等)不支持自动优化尾递归,因此通常认为空间复杂度是 𝑂(𝑛) 。 Q:函数和方法这两个术语的区别是什么? 函数(function)可以被独立执行,所 下面以几种常见的编程语言为例来说明。 ‧ C 语言是过程式编程语言,没有面向对象的概念,所以只有函数。但我们可以通过创建结构体(struct) 来模拟面向对象编程,与结构体相关联的函数就相当于其他编程语言中的方法。 ‧ Java 和 C# 是面向对象的编程语言,代码块(方法)通常作为某个类的一部分。静态方法的行为类似于 函数,因为它被绑定在类上,不能访问特定的实例变量。 ‧ C++ 和 Python 既支持过程式编程(函数),也支持面向对象编程(方法)。 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 个数字。 ‧ 整数类型 int 占用 4 字节 = 32 比特,可以表示 232 个数字。 表 3‑1 列举了 Java 中各种基本数据类型的占用空间、取值范围和默认值。此表格无须死记硬背,大致理解即 可,需要时可以通过查表来回忆。0 魔豆 | 379 页 | 18.48 MB | 11 月前3
Hello 算法 1.2.0 ruby版𝑛)、𝑂(𝑛)、𝑂(𝑛2) 和 𝑂(2𝑛) 等。 2. Q & A Q:尾递归的空间复杂度是 𝑂(1) 吗? 理论上,尾递归函数的空间复杂度可以优化至 𝑂(1) 。不过绝大多数编程语言(例如 Java、Python、C++、 Go、C# 等)不支持自动优化尾递归,因此通常认为空间复杂度是 𝑂(𝑛) 。 Q:函数和方法这两个术语的区别是什么? 函数(function)可以被独立执行,所 下面以几种常见的编程语言为例来说明。 ‧ C 语言是过程式编程语言,没有面向对象的概念,所以只有函数。但我们可以通过创建结构体(struct) 来模拟面向对象编程,与结构体相关联的函数就相当于其他编程语言中的方法。 ‧ Java 和 C# 是面向对象的编程语言,代码块(方法)通常作为某个类的一部分。静态方法的行为类似于 函数,因为它被绑定在类上,不能访问特定的实例变量。 ‧ C++ 和 Python 既支持过程式编程(函数),也支持面向对象编程(方法)。 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 个数字。 ‧ 整数类型 int 占用 4 字节 = 32 比特,可以表示 232 个数字。 表 3‑1 列举了 Java 中各种基本数据类型的占用空间、取值范围和默认值。此表格无须死记硬背,大致理解即 可,需要时可以通过查表来回忆。0 魔豆 | 372 页 | 18.44 MB | 11 月前3
Hello 算法 1.2.0 kotlin版𝑛)、𝑂(𝑛)、𝑂(𝑛2) 和 𝑂(2𝑛) 等。 2. Q & A Q:尾递归的空间复杂度是 𝑂(1) 吗? 理论上,尾递归函数的空间复杂度可以优化至 𝑂(1) 。不过绝大多数编程语言(例如 Java、Python、C++、 Go、C# 等)不支持自动优化尾递归,因此通常认为空间复杂度是 𝑂(𝑛) 。 Q:函数和方法这两个术语的区别是什么? 函数(function)可以被独立执行,所 下面以几种常见的编程语言为例来说明。 ‧ C 语言是过程式编程语言,没有面向对象的概念,所以只有函数。但我们可以通过创建结构体(struct) 来模拟面向对象编程,与结构体相关联的函数就相当于其他编程语言中的方法。 ‧ Java 和 C# 是面向对象的编程语言,代码块(方法)通常作为某个类的一部分。静态方法的行为类似于 函数,因为它被绑定在类上,不能访问特定的实例变量。 ‧ C++ 和 Python 既支持过程式编程(函数),也支持面向对象编程(方法)。 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 个数字。 ‧ 整数类型 int 占用 4 字节 = 32 比特,可以表示 232 个数字。 表 3‑1 列举了 Java 中各种基本数据类型的占用空间、取值范围和默认值。此表格无须死记硬背,大致理解即 可,需要时可以通过查表来回忆。0 魔豆 | 382 页 | 18.48 MB | 11 月前3
Hello 算法 1.2.0 javascript版𝑛)、𝑂(𝑛)、𝑂(𝑛2) 和 𝑂(2𝑛) 等。 2. Q & A Q:尾递归的空间复杂度是 𝑂(1) 吗? 理论上,尾递归函数的空间复杂度可以优化至 𝑂(1) 。不过绝大多数编程语言(例如 Java、Python、C++、 Go、C# 等)不支持自动优化尾递归,因此通常认为空间复杂度是 𝑂(𝑛) 。 Q:函数和方法这两个术语的区别是什么? 函数(function)可以被独立执行,所 函数。但我们可以通过创建结构体(struct) 来模拟面向对象编程,与结构体相关联的函数就相当于其他编程语言中的方法。 第 2 章 复杂度分析 www.hello‑algo.com 50 ‧ Java 和 C# 是面向对象的编程语言,代码块(方法)通常作为某个类的一部分。静态方法的行为类似于 函数,因为它被绑定在类上,不能访问特定的实例变量。 ‧ C++ 和 Python 既支持过程式编程(函数),也支持面向对象编程(方法)。 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 个数字。 ‧ 整数类型 int 占用 4 字节 = 32 比特,可以表示 232 个数字。 表 3‑1 列举了 Java 中各种基本数据类型的占用空间、取值范围和默认值。此表格无须死记硬背,大致理解即 可,需要时可以通过查表来回忆。0 魔豆 | 379 页 | 18.47 MB | 11 月前3
Hello 算法 1.2.0 dart版𝑛)、𝑂(𝑛)、𝑂(𝑛2) 和 𝑂(2𝑛) 等。 2. Q & A Q:尾递归的空间复杂度是 𝑂(1) 吗? 理论上,尾递归函数的空间复杂度可以优化至 𝑂(1) 。不过绝大多数编程语言(例如 Java、Python、C++、 Go、C# 等)不支持自动优化尾递归,因此通常认为空间复杂度是 𝑂(𝑛) 。 Q:函数和方法这两个术语的区别是什么? 函数(function)可以被独立执行,所 下面以几种常见的编程语言为例来说明。 ‧ C 语言是过程式编程语言,没有面向对象的概念,所以只有函数。但我们可以通过创建结构体(struct) 来模拟面向对象编程,与结构体相关联的函数就相当于其他编程语言中的方法。 ‧ Java 和 C# 是面向对象的编程语言,代码块(方法)通常作为某个类的一部分。静态方法的行为类似于 函数,因为它被绑定在类上,不能访问特定的实例变量。 ‧ C++ 和 Python 既支持过程式编程(函数),也支持面向对象编程(方法)。 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 个数字。 ‧ 整数类型 int 占用 4 字节 = 32 比特,可以表示 232 个数字。 表 3‑1 列举了 Java 中各种基本数据类型的占用空间、取值范围和默认值。此表格无须死记硬背,大致理解即 可,需要时可以通过查表来回忆。0 魔豆 | 378 页 | 18.46 MB | 11 月前3
Hello 算法 1.2.0 typescript版𝑛)、𝑂(𝑛)、𝑂(𝑛2) 和 𝑂(2𝑛) 等。 2. Q & A Q:尾递归的空间复杂度是 𝑂(1) 吗? 理论上,尾递归函数的空间复杂度可以优化至 𝑂(1) 。不过绝大多数编程语言(例如 Java、Python、C++、 Go、C# 等)不支持自动优化尾递归,因此通常认为空间复杂度是 𝑂(𝑛) 。 Q:函数和方法这两个术语的区别是什么? 函数(function)可以被独立执行,所 函数。但我们可以通过创建结构体(struct) 来模拟面向对象编程,与结构体相关联的函数就相当于其他编程语言中的方法。 第 2 章 复杂度分析 www.hello‑algo.com 50 ‧ Java 和 C# 是面向对象的编程语言,代码块(方法)通常作为某个类的一部分。静态方法的行为类似于 函数,因为它被绑定在类上,不能访问特定的实例变量。 ‧ C++ 和 Python 既支持过程式编程(函数),也支持面向对象编程(方法)。 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 个数字。 ‧ 整数类型 int 占用 4 字节 = 32 比特,可以表示 232 个数字。 表 3‑1 列举了 Java 中各种基本数据类型的占用空间、取值范围和默认值。此表格无须死记硬背,大致理解即 可,需要时可以通过查表来回忆。0 魔豆 | 383 页 | 18.49 MB | 11 月前3
Hello 算法 1.2.0 rust版𝑛)、𝑂(𝑛)、𝑂(𝑛2) 和 𝑂(2𝑛) 等。 2. Q & A Q:尾递归的空间复杂度是 𝑂(1) 吗? 理论上,尾递归函数的空间复杂度可以优化至 𝑂(1) 。不过绝大多数编程语言(例如 Java、Python、C++、 Go、C# 等)不支持自动优化尾递归,因此通常认为空间复杂度是 𝑂(𝑛) 。 Q:函数和方法这两个术语的区别是什么? 第 2 章 复杂度分析 www.hello‑algo 下面以几种常见的编程语言为例来说明。 ‧ C 语言是过程式编程语言,没有面向对象的概念,所以只有函数。但我们可以通过创建结构体(struct) 来模拟面向对象编程,与结构体相关联的函数就相当于其他编程语言中的方法。 ‧ Java 和 C# 是面向对象的编程语言,代码块(方法)通常作为某个类的一部分。静态方法的行为类似于 函数,因为它被绑定在类上,不能访问特定的实例变量。 ‧ C++ 和 Python 既支持过程式编程(函数),也支持面向对象编程(方法)。 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 个数字。 ‧ 整数类型 int 占用 4 字节 = 32 比特,可以表示 232 个数字。 表 3‑1 列举了 Java 中各种基本数据类型的占用空间、取值范围和默认值。此表格无须死记硬背,大致理解即 可,需要时可以通过查表来回忆。0 魔豆 | 387 页 | 18.51 MB | 11 月前3
Hello 算法 1.2.0 python版𝑛)、𝑂(𝑛)、𝑂(𝑛2) 和 𝑂(2𝑛) 等。 2. Q & A Q:尾递归的空间复杂度是 𝑂(1) 吗? 理论上,尾递归函数的空间复杂度可以优化至 𝑂(1) 。不过绝大多数编程语言(例如 Java、Python、C++、 Go、C# 等)不支持自动优化尾递归,因此通常认为空间复杂度是 𝑂(𝑛) 。 Q:函数和方法这两个术语的区别是什么? 函数(function)可以被独立执行,所 函数。但我们可以通过创建结构体(struct) 来模拟面向对象编程,与结构体相关联的函数就相当于其他编程语言中的方法。 第 2 章 复杂度分析 www.hello‑algo.com 48 ‧ Java 和 C# 是面向对象的编程语言,代码块(方法)通常作为某个类的一部分。静态方法的行为类似于 函数,因为它被绑定在类上,不能访问特定的实例变量。 ‧ C++ 和 Python 既支持过程式编程(函数),也支持面向对象编程(方法)。 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 个数字。 ‧ 整数类型 int 占用 4 字节 = 32 比特,可以表示 232 个数字。 表 3‑1 列举了 Java 中各种基本数据类型的占用空间、取值范围和默认值。此表格无须死记硬背,大致理解即 可,需要时可以通过查表来回忆。0 魔豆 | 364 页 | 18.43 MB | 11 月前3
共 14 条
- 1
- 2






