mirror of
https://github.com/krahets/hello-algo.git
synced 2026-08-24 17:17:14 +00:00
build
This commit is contained in:
@@ -181,7 +181,19 @@ comments: true
|
||||
=== "Zig"
|
||||
|
||||
```zig title=""
|
||||
const hello = [5]u8{ 'h', 'e', 'l', 'l', 'o' };
|
||||
// 以上程式碼展示了定義一個字面量陣列的方式,其中你可以選擇指明陣列的大小或者使用 _ 代替。使用 _ 時,Zig 會嘗試自動計算陣列的長度
|
||||
|
||||
const matrix_4x4 = [4][4]f32{
|
||||
[_]f32{ 1.0, 0.0, 0.0, 0.0 },
|
||||
[_]f32{ 0.0, 1.0, 0.0, 1.0 },
|
||||
[_]f32{ 0.0, 0.0, 1.0, 0.0 },
|
||||
[_]f32{ 0.0, 0.0, 0.0, 1.0 },
|
||||
};
|
||||
// 多維陣列(矩陣)實際上就是巢狀陣列,我們很容易就可以建立一個多維陣列出來
|
||||
|
||||
const array = [_:0]u8{ 1, 2, 3, 4 };
|
||||
// 定義一個哨兵終止陣列,本質上來說,這是為了相容 C 中的規定的字串結尾字元\0。我們使用語法 [N:x]T 來描述一個元素為型別 T,長度為 N 的陣列,在它對應 N 的索引處的值應該是 x
|
||||
```
|
||||
|
||||
??? pythontutor "視覺化執行"
|
||||
|
||||
@@ -1759,7 +1759,8 @@ comments: true
|
||||
if (
|
||||
!this.adjList.has(vet1) ||
|
||||
!this.adjList.has(vet2) ||
|
||||
vet1 === vet2
|
||||
vet1 === vet2 ||
|
||||
this.adjList.get(vet1).indexOf(vet2) === -1
|
||||
) {
|
||||
throw new Error('Illegal Argument Exception');
|
||||
}
|
||||
@@ -1848,7 +1849,8 @@ comments: true
|
||||
if (
|
||||
!this.adjList.has(vet1) ||
|
||||
!this.adjList.has(vet2) ||
|
||||
vet1 === vet2
|
||||
vet1 === vet2 ||
|
||||
this.adjList.get(vet1).indexOf(vet2) === -1
|
||||
) {
|
||||
throw new Error('Illegal Argument Exception');
|
||||
}
|
||||
|
||||
@@ -758,4 +758,4 @@ comments: true
|
||||
|
||||
- 二分搜尋僅適用於有序資料。若輸入資料無序,為了使用二分搜尋而專門進行排序,得不償失。因為排序演算法的時間複雜度通常為 $O(n \log n)$ ,比線性查詢和二分搜尋都更高。對於頻繁插入元素的場景,為保持陣列有序性,需要將元素插入到特定位置,時間複雜度為 $O(n)$ ,也是非常昂貴的。
|
||||
- 二分搜尋僅適用於陣列。二分搜尋需要跳躍式(非連續地)訪問元素,而在鏈結串列中執行跳躍式訪問的效率較低,因此不適合應用在鏈結串列或基於鏈結串列實現的資料結構。
|
||||
- 小資料量下,線性查詢效能更佳。線上性查詢中,每輪只需 1 次判斷操作;而在二分搜尋中,需要 1 次加法、1 次除法、1 ~ 3 次判斷操作、1 次加法(減法),共 4 ~ 6 個單元操作;因此,當資料量 $n$ 較小時,線性查詢反而比二分搜尋更快。
|
||||
- 小資料量下,線性查詢效能更佳。在線性查詢中,每輪只需 1 次判斷操作;而在二分搜尋中,需要 1 次加法、1 次除法、1 ~ 3 次判斷操作、1 次加法(減法),共 4 ~ 6 個單元操作;因此,當資料量 $n$ 較小時,線性查詢反而比二分搜尋更快。
|
||||
|
||||
@@ -183,10 +183,7 @@ comments: true
|
||||
// 簡單實現,無法用於排序物件
|
||||
function countingSortNaive(nums) {
|
||||
// 1. 統計陣列最大元素 m
|
||||
let m = 0;
|
||||
for (const num of nums) {
|
||||
m = Math.max(m, num);
|
||||
}
|
||||
let m = Math.max(...nums);
|
||||
// 2. 統計各數字的出現次數
|
||||
// counter[num] 代表 num 的出現次數
|
||||
const counter = new Array(m + 1).fill(0);
|
||||
@@ -210,10 +207,7 @@ comments: true
|
||||
// 簡單實現,無法用於排序物件
|
||||
function countingSortNaive(nums: number[]): void {
|
||||
// 1. 統計陣列最大元素 m
|
||||
let m = 0;
|
||||
for (const num of nums) {
|
||||
m = Math.max(m, num);
|
||||
}
|
||||
let m: number = Math.max(...nums);
|
||||
// 2. 統計各數字的出現次數
|
||||
// counter[num] 代表 num 的出現次數
|
||||
const counter: number[] = new Array<number>(m + 1).fill(0);
|
||||
@@ -650,10 +644,7 @@ $$
|
||||
// 完整實現,可排序物件,並且是穩定排序
|
||||
function countingSort(nums) {
|
||||
// 1. 統計陣列最大元素 m
|
||||
let m = 0;
|
||||
for (const num of nums) {
|
||||
m = Math.max(m, num);
|
||||
}
|
||||
let m = Math.max(...nums);
|
||||
// 2. 統計各數字的出現次數
|
||||
// counter[num] 代表 num 的出現次數
|
||||
const counter = new Array(m + 1).fill(0);
|
||||
@@ -688,10 +679,7 @@ $$
|
||||
// 完整實現,可排序物件,並且是穩定排序
|
||||
function countingSort(nums: number[]): void {
|
||||
// 1. 統計陣列最大元素 m
|
||||
let m = 0;
|
||||
for (const num of nums) {
|
||||
m = Math.max(m, num);
|
||||
}
|
||||
let m: number = Math.max(...nums);
|
||||
// 2. 統計各數字的出現次數
|
||||
// counter[num] 代表 num 的出現次數
|
||||
const counter: number[] = new Array<number>(m + 1).fill(0);
|
||||
|
||||
@@ -388,12 +388,7 @@ $$
|
||||
/* 基數排序 */
|
||||
function radixSort(nums) {
|
||||
// 獲取陣列的最大元素,用於判斷最大位數
|
||||
let m = Number.MIN_VALUE;
|
||||
for (const num of nums) {
|
||||
if (num > m) {
|
||||
m = num;
|
||||
}
|
||||
}
|
||||
let m = Math.max(... nums);
|
||||
// 按照從低位到高位的順序走訪
|
||||
for (let exp = 1; exp <= m; exp *= 10) {
|
||||
// 對陣列元素的第 k 位執行計數排序
|
||||
@@ -445,12 +440,7 @@ $$
|
||||
/* 基數排序 */
|
||||
function radixSort(nums: number[]): void {
|
||||
// 獲取陣列的最大元素,用於判斷最大位數
|
||||
let m = Number.MIN_VALUE;
|
||||
for (const num of nums) {
|
||||
if (num > m) {
|
||||
m = num;
|
||||
}
|
||||
}
|
||||
let m: number = Math.max(... nums);
|
||||
// 按照從低位到高位的順序走訪
|
||||
for (let exp = 1; exp <= m; exp *= 10) {
|
||||
// 對陣列元素的第 k 位執行計數排序
|
||||
|
||||
Reference in New Issue
Block a user