8000 [refactor]: update files · coderonion/hello-algo-rust@0bd407a · GitHub
[go: up one dir, main page]

Skip to content

Commit 0bd407a

Browse files
committed
[refactor]: update files
0 parents  commit 0bd407a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+3675
-0
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.DS_Store
2+
.vscode/
3+
.idea/
4+
5+
/target
6+
Cargo.lock

Cargo.toml

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
[package]
2+
name = "hello-algo-rust"
3+
version = "0.1.0"
4+
edition = "2021"
5+
publish = false
6+
7+
# Run Command: cargo run --bin time_complexity
8+
[[bin]]
9+
name = "time_complexity"
10+
path = "chapter_computational_complexity/time_complexity.rs"
11+
12+
# Run Command: cargo run --bin worst_best_time_complexity
13+
[[bin]]
14+
name = "worst_best_time_complexity"
15+
path = "chapter_computational_complexity/worst_best_time_complexity.rs"
16+
17+
# # Run Command: cargo run --bin space_complexity
18+
# [[bin]]
19+
# name = "space_complexity"
20+
# path = "chapter_computational_complexity/space_complexity.rs"
21+
22+
# Run Command: cargo run --bin two_sum
23+
[[bin]]
24+
name = "two_sum"
25+
path = "chapter_searching/two_sum.rs"
26+
27+
# Run Command: cargo run --bin array
28+
[[bin]]
29+
name = "array"
30+
path = "chapter_array_and_linkedlist/array.rs"
31+
32+
# Run Command: cargo run --bin linked_list
33+
[[bin]]
34+
name = "linked_list"
35+
path = "chapter_array_and_linkedlist/linked_list.rs"
36+
37+
# Run Command: cargo run --bin list
38+
[[bin]]
39+
name = "list"
40+
path = "chapter_array_and_linkedlist/list.rs"
41+
42+
# Run Command: cargo run --bin my_list
43+
[[bin]]
44+
name = "my_list"
45+
path = "chapter_array_and_linkedlist/my_list.rs"
46+
47+
# Run Command: cargo run --bin stack
48+
[[bin]]
49+
name = "stack"
50+
path = "chapter_stack_and_queue/stack.rs"
51+
52+
# Run Command: cargo run --bin array_stack
53+
[[bin]]
54+
name = "array_stack"
55+
path = "chapter_stack_and_queue/array_stack.rs"
56+
57+
# Run Command: cargo run --bin linkedlist_stack
58+
[[bin]]
59+
name = "linkedlist_stack"
60+
path = "chapter_stack_and_queue/linkedlist_stack.rs"
61+
62+
# Run Command: cargo run --bin queue
63+
[[bin]]
64+
name = "queue"
65+
path = "chapter_stack_and_queue/queue.rs"
66+
67+
# Run Command: cargo run --bin linkedlist_queue
68+
[[bin]]
69+
name = "linkedlist_queue"
70+
path = "chapter_stack_and_queue/linkedlist_queue.rs"
71+
72+
# Run Command: cargo run --bin deque
73+
[[bin]]
74+
name = "deque"
75+
path = "chapter_stack_and_queue/deque.rs"
76+
77+
# Run Command: cargo run --bin array_deque
78+
[[bin]]
79+
name = "array_deque"
80+
path = "chapter_stack_and_queue/array_deque.rs"
81+
82+
# Run Command: cargo run --bin linkedlist_deque
83+
[[bin]]
84+
name = "linkedlist_deque"
85+
path = "chapter_stack_and_queue/linkedlist_deque.rs"
86+
87+
# Run Command: cargo run --bin hash_map
88+
[[bin]]
89+
name = "hash_map"
90+
path = "chapter_hashing/hash_map.rs"
91+
92+
# Run Command: cargo run --bin binary_search
93+
[[bin]]
94+
name = "binary_search"
95+
path = "chapter_searching/binary_search.rs"
96+
97+
# Run Command: cargo run --bin bubble_sort
98+
[[bin]]
99+
name = "bubble_sort"
100+
path = "chapter_sorting/bubble_sort.rs"
101+
102+
# Run Command: cargo run --bin linear_search
103+
[[bin]]
104+
name = "linear_search"
105+
path = "chapter_searching/linear_search.rs"
106+
107+
# Run Command: cargo run --bin hashing_search
108+
[[bin]]
109+
name = "hashing_search"
110+
path = "chapter_searching/hashing_search.rs"
111+
112+
# Run Command: cargo run --bin climbing_stairs_dfs
113+
[[bin]]
114+
name = "climbing_stairs_dfs"
115+
path = "chapter_dynamic_programming/climbing_stairs_dfs.rs"
116+
117+
# Run Command: cargo run --bin climbing_stairs_dfs_mem
118+
[[bin]]
119+
name = "climbing_stairs_dfs_mem"
120+
path = "chapter_dynamic_programming/climbing_stairs_dfs_mem.rs"
121+
122+
# Run Command: cargo run --bin climbing_stairs_dp
123+
[[bin]]
124+
name = "climbing_stairs_dp"
125+
path = "chapter_dynamic_programming/climbing_stairs_dp.rs"
126+
127+
# Run Command: cargo run --bin min_cost_climbing_stairs_dp
128+
[[bin]]
129+
name = "min_cost_climbing_stairs_dp"
130+
path = "chapter_dynamic_programming/min_cost_climbing_stairs_dp.rs"
131+
132+
# Run Command: cargo run --bin climbing_stairs_constraint_dp
133+
[[bin]]
134+
name = "climbing_stairs_constraint_dp"
135+
path = "chapter_dynamic_programming/climbing_stairs_constraint_dp.rs"
136+
137+
# Run Command: cargo run --bin climbing_stairs_backtrack
138+
[[bin]]
139+
name = "climbing_stairs_backtrack"
140+
path = "chapter_dynamic_programming/climbing_stairs_backtrack.rs"
141+
142+
# Run Command: cargo run --bin subset_sum_i_naive
143+
[[bin]]
144+
name = "subset_sum_i_naive"
145+
path = "chapter_backtracking/subset_sum_i_naive.rs"
146+
147+
# Run Command: cargo run --bin subset_sum_i
148+
[[bin]]
149+
name = "subset_sum_i"
150+
path = "chapter_backtracking/subset_sum_i.rs"
151+
152+
# Run Command: cargo run --bin subset_sum_ii
153+
[[bin]]
154+
name = "subset_sum_ii"
155+
path = "chapter_backtracking/subset_sum_ii.rs"
156+
157+
# Run Command: cargo run --bin coin_change
158+
[[bin]]
159+
name = "coin_change"
160+
path = "chapter_dynamic_programming/coin_change.rs"
161+
162+
# Run Command: cargo run --bin coin_change_ii
163+
[[bin]]
164+
name = "coin_change_ii"
165+
path = "chapter_dynamic_programming/coin_change_ii.rs"
166+
167+
# Run Command: cargo run --bin unbounded_knapsack
168+
[[bin]]
169+
name = "unbounded_knapsack"
170+
path = "chapter_dynamic_programming/unbounded_knapsack.rs"
171+
172+
# Run Command: cargo run --bin knapsack
173+
[[bin]]
174+
name = "knapsack"
175+
path = "chapter_dynamic_programming/knapsack.rs"
176+
177+
# Run Command: cargo run --bin min_path_sum
178+
[[bin]]
179+
name = "min_path_sum"
180+
path = "chapter_dynamic_programming/min_path_sum.rs"
181+
182+
# Run Command: cargo run --bin edit_distance
183+
[[bin]]
184+
name = "edit_distance"
185+
path = "chapter_dynamic_programming/edit_distance.rs"
186+
187+
# Run Command: cargo run --bin n_queens
188+
[[bin]]
189+
name = "n_queens"
190+
path = "chapter_backtracking/n_queens.rs"
191+
192+
# Run Command: cargo run --bin permutations_i
193+
[[bin]]
194+
name = "permutations_i"
195+
path = "chapter_backtracking/permutations_i.rs"
196+
197+
# Run Command: cargo run --bin permutations_ii
198+
[[bin]]
199+
name = "permutations_ii"
200+
path = "chapter_backtracking/permutations_ii.rs"
201+
202+
# # Run Command: cargo run --bin preorder_traversal_i_compact
203+
# [[bin]]
204+
# name = "preorder_traversal_i_compact"
205+
# path = "chapter_backtracking/preorder_traversal_i_compact.rs"
206+
207+
# # Run Command: cargo run --bin preorder_traversal_ii_compact
208+
# [[bin]]
209+
# name = "preorder_traversal_ii_compact"
210+
# path = "chapter_backtracking/preorder_traversal_ii_compact.rs"
211+
212+
# # Run Command: cargo run --bin preorder_traversal_iii_compact
213+
# [[bin]]
214+
# name = "preorder_traversal_iii_compact"
215+
# path = "chapter_backtracking/preorder_traversal_iii_compact.rs"
216+
217+
# # Run Command: cargo run --bin preorder_traversal_iii_template
218+
# [[bin]]
219+
# name = "preorder_traversal_iii_template"
220+
# path = "chapter_backtracking/preorder_traversal_iii_template.rs"
221+
222+
# Run Command: cargo run --bin binary_search_recur
223+
[[bin]]
224+
name = "binary_search_recur"
225+
path = "chapter_divide_and_conquer/binary_search_recur.rs"
226+
227+
# Run Command: cargo run --bin hanota
228+
[[bin]]
229+
name = "hanota"
230+
path = "chapter_divide_and_conquer/hanota.rs"
231+
232+
# # Run Command: cargo run --bin build_tree
233+
# [[bin]]
234+
# name = "build_tree"
235+
# path = "chapter_divide_and_conquer/build_tree.rs"
236+
237+
[dependencies]
238+
rand = "0.8.5"

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Hello-Algo-Rust
2+
- [**Rust**](https://www.rust-lang.org/) programming language codes for the famous public project [krahets/hello-algo](https://github.com/krahets/hello-algo) <img src="https://img.shields.io/github/stars/krahets/hello-algo?style=social"/> about data structures and algorithms.
3+
- Go read this great open access e-book now -> [ hello-algo.com |《Hello, Algorithm》|《 Hello,算法 》](https://www.hello-algo.com/).

chapter_array_and_linkedlist/array.rs

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
/*
2+
* File: array.rs
3+
* Created Time: 2023-01-15
4+
* Author: xBLACICEx (xBLACKICEx@outlook.com), codingonion (coderonion@gmail.com)
5+
*/
6+
7+
include!("../include/include.rs");
8+
9+
use rand::Rng;
10+
11+
/* 随机返回一个数组元素 */
12+
fn random_access(nums: &[i32]) -> i32 {
13+
// 在区间 [0, nums.len()) 中随机抽取一个数字
14+
let random_index = rand::thread_rng().gen_range(0..nums.len());
15+
// 获取并返回随机元素
16+
let random_num = nums[random_index];
17+
random_num
18+
}
19+
20+
/* 扩展数组长度 */
21+
fn extend(nums: Vec<i32>, enlarge: usize) -> Vec<i32> {
22+
// 初始化一个扩展长度后的数组
23+
let mut res: Vec<i32> = vec![0; nums.len() + enlarge];
24+
// 将原数组中的所有元素复制到新
25+
for i in 0..nums.len() {
26+
res[i] = nums[i];
27+
}
28+
// 返回扩展后的新数组
29+
res
30+
}
31+
32+
/* 在数组的索引 index 处插入元素 num */
33+
fn insert(nums: &mut Vec<i32>, num: i32, index: usize) {
34+
// 把索引 index 以及之后的所有元素向后移动一位
35+
for i in (index + 1..nums.len()).rev() {
36+
nums[i] = nums[i - 1];
37+
}
38+
// 将 num 赋给 index 处元素
39+
nums[index] = num;
40+
}
41+
42+
/* 删除索引 index 处元素 */
43+
fn remove(nums: &mut Vec<i32>, index: usize) {
44+
// 把索引 index 之后的所有元素向前移动一位
45+
for i in index..nums.len() - 1 {
46+
nums[i] = nums[i + 1];
47+
}
48+
}
49+
50+
/* 遍历数组 */
51+
fn traverse(nums: &[i32]) {
52+
let mut _count = 0;
53+
// 通过索引遍历数组
54+
for _ in 0..nums.len() {
55+
_count += 1;
56+
}
57+
// 直接遍历数组
58+
for _ in nums {
59+
_count += 1;
60+
}
61+
}
62+
63+
/* 在数组中查找指定元素 */
64+
fn find(nums: &[i32], target: i32) -> Option<usize> {
65+
for i in 0..nums.len() {
66+
if nums[i] == target {
67+
return Some(i);
68+
}
69+
}
70+
None
71+
}
72+
73+
/* Driver Code */
74+
fn main() {
75+
let arr = [0; 5];
76+
print!("数组 arr = ");
77+
print_util::print_array(&arr);
78+
// 在 Rust 中,指定长度时([i32; 5])为数组
79+
// 由于 Rust 的数组被设计为在编译期确定长度,因此只能使用常量来指定长度
80+
// 为了方便实现扩容 extend() 方法,以下将(Vec) 看作数组(Array)也是rust一般情况下使用动态数组的类型
81+
let nums = vec![ 1, 3, 2, 5, 4 ];
82+
print!("\n数组 nums = ");
83+
print_util::print_array(&nums);
84+
85+
// 随机访问
86+
let random_num = random_access(&nums);
87+
println!("\n在 nums 中获取随机元素 {}", random_num);
88+
89+
// 长度扩展
90+
let mut nums = extend(nums, 3);
91+
print!("将数组长度扩展至 8 ,得到 nums = ");
92+
print_util::print_array(&arr);
93+
94+
// 插入元素
95+
insert(&mut nums, 6, 3);
96+
print!("\n在索引 3 处插入数字 6 ,得到 nums = ");
97+
print_util::print_array(&nums);
98+
99+
// 删除元素
100+
remove(&mut nums, 2);
101+
print!("\n删除索引 2 处的元素,得到 nums = ");
102+
print_util::print_array(&nums);
103+
104+
// 遍历数组
105+
traverse(&nums);
106+
107+
// 查找元素
108+
let index = find(&nums, 3).unwrap();
109+
println!("\n在 nums 中查找元素 3 ,得到索引 = {}", index);
110+
}

0 commit comments

Comments
 (0)
0