Skip to content

Commit 5f97be3

Browse files
author
Caitlin Gao
committed
feat(geektime_algo): add 05_array for rust
1 parent 1e8a82e commit 5f97be3

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

rust/05_array/main.rs

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
struct NewArray {
2+
array: Vec<i32>,
3+
count: i32,
4+
}
5+
6+
impl NewArray {
7+
fn new(capacity: usize) -> NewArray {
8+
NewArray { array: Vec::with_capacity(capacity), count: 0 }
9+
}
10+
11+
fn find(&self, index: usize) -> i32 {
12+
if index > self.count as usize { return -1; }
13+
self.array[index]
14+
}
15+
16+
fn insert(&mut self, index: usize, value: i32) -> bool {
17+
let array_count = self.count as usize;
18+
if index > array_count || array_count == self.array.capacity() { return false; }
19+
20+
if index == array_count {
21+
self.array.push(value);
22+
} else {
23+
let tmp_arr = self.array.clone();
24+
25+
self.array = Vec::with_capacity(self.array.capacity());
26+
for i in 0..index {
27+
self.array.push(tmp_arr[i]);
28+
}
29+
30+
self.array.push(value);
31+
for i in index..array_count {
32+
self.array.push(tmp_arr[i]);
33+
}
34+
}
35+
36+
self.count += 1;
37+
true
38+
}
39+
40+
fn remove(&mut self, index: usize) -> i32 {
41+
if index >= self.count as usize { return -1; }
42+
43+
let result = self.array[index];
44+
let tmp_arr = self.array.clone();
45+
46+
self.array = Vec::with_capacity(self.array.capacity());
47+
for i in 0..index {
48+
self.array.push(tmp_arr[i]);
49+
}
50+
51+
for i in index+1..self.count as usize {
52+
self.array.push(tmp_arr[i]);
53+
}
54+
55+
self.count -=1;
56+
result
57+
}
58+
}
59+
60+
fn main() {
61+
let mut new_array = NewArray::new(10);
62+
assert_eq!(new_array.insert(0, 3), true);
63+
assert_eq!(new_array.insert(1, 2), true);
64+
assert_eq!(new_array.insert(2, 8), true);
65+
assert_eq!(new_array.insert(0, 9), true);
66+
assert_eq!(new_array.insert(5, 7), false);
67+
assert_eq!(new_array.insert(4, 5), true);
68+
assert_eq!(new_array.find(3), 8);
69+
assert_eq!(new_array.find(12), -1);
70+
assert_eq!(new_array.remove(1), 3);
71+
assert_eq!(new_array.remove(9), -1);
72+
}

0 commit comments

Comments
 (0)