Skip to content

Commit ad15fcd

Browse files
xiyouxiyou
authored andcommitted
update 0088 0118
1 parent 767a384 commit ad15fcd

File tree

7 files changed

+162
-232
lines changed

7 files changed

+162
-232
lines changed

Algorithms/0003.longest_substring_without_repeating_characters/longest_substring_without_repeating_characters.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::cmp::max;
22

3-
pub fn longest_substring_without_repeating_characters (s: String) -> usize {
4-
3+
impl Solution {
4+
pub fn length_of_longest_substring(s: String) -> i32 {
55
let mut start = 0;
66
let mut end = 0;
77

@@ -34,9 +34,12 @@ pub fn longest_substring_without_repeating_characters (s: String) -> usize {
3434
result = max(result, end - start);
3535
}
3636

37-
return result;
37+
return result as i32;
38+
}
3839
}
3940

41+
42+
4043
fn main() {
4144
let s = String::from("Hello world");
4245
let result = longest_substring_without_repeating_characters(s);

Algorithms/0004.median_of_two_sorted_arrays/median_of_two_sorted_arrays.rs

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,62 @@
11
use std::cmp;
22
use std::mem;
33

4-
pub fn median_of_two_sorted_arrays (v1: Vec<i32>, v2: Vec<i32>) -> f32 {
4+
impl Solution {
5+
pub fn find_median_sorted_arrays(nums1: Vec<i32>, nums2: Vec<i32>) -> f64 {
6+
let mut vec1 = nums1;
7+
let mut vec2 = nums2;
58

6-
let mut vec1 = v1;
7-
let mut vec2 = v2;
8-
9-
if vec1.len() > vec2.len() {
10-
mem::swap(&mut vec1, &mut vec2);
11-
}
9+
if vec1.len() > vec2.len() {
10+
mem::swap(&mut vec1, &mut vec2);
11+
}
1212

13-
let len1 = vec1.len();
14-
let len2 = vec2.len();
13+
let len1 = vec1.len();
14+
let len2 = vec2.len();
1515

16-
let half_len = (len1 + len2 + 1) / 2;
17-
let mut index_min = 0;
18-
let mut index_max = len1;
16+
let half_len = (len1 + len2 + 1) / 2;
17+
let mut index_min = 0;
18+
let mut index_max = len1;
1919

20-
while index_min <= index_max {
21-
let i = (index_min + index_max) / 2;
22-
let j = half_len - i;
20+
while index_min <= index_max {
21+
let i = (index_min + index_max) / 2;
22+
let j = half_len - i;
2323

24-
if i < len1 && vec1[i] < vec2[j - 1] {
25-
index_min = i + 1;
26-
} else if i > 0 && vec1[i-1] > vec2[j] {
27-
index_max = i - 1;
28-
} else {
29-
let left_max;
30-
let right_min;
31-
if i == 0 {
32-
left_max = vec2[j - 1];
33-
} else if j == 0 {
34-
left_max = vec1[i-1];
24+
if i < len1 && vec1[i] < vec2[j - 1] {
25+
index_min = i + 1;
26+
} else if i > 0 && vec1[i-1] > vec2[j] {
27+
index_max = i - 1;
3528
} else {
36-
left_max = cmp::max(vec1[i-1], vec2[j-1]);
37-
}
29+
let left_max;
30+
let right_min;
31+
if i == 0 {
32+
left_max = vec2[j - 1];
33+
} else if j == 0 {
34+
left_max = vec1[i-1];
35+
} else {
36+
left_max = cmp::max(vec1[i-1], vec2[j-1]);
37+
}
3838

39-
if (len1 + len2) % 2 == 1 {
40-
return left_max as f32;
41-
}
39+
if (len1 + len2) % 2 == 1 {
40+
return left_max as f64;
41+
}
4242

43-
if i == len1 {
44-
right_min = vec2[j];
45-
} else if j == len2 {
46-
right_min = vec1[i];
47-
} else {
48-
right_min = cmp::min(vec1[i], vec2[j]);
49-
}
43+
if i == len1 {
44+
right_min = vec2[j];
45+
} else if j == len2 {
46+
right_min = vec1[i];
47+
} else {
48+
right_min = cmp::min(vec1[i], vec2[j]);
49+
}
5050

51-
return (left_max + right_min) as f32 / 2.0
51+
return (left_max + right_min) as f64 / 2.0
52+
}
5253
}
53-
}
5454

55-
return 0.0;
55+
return 0.0;
56+
}
5657
}
5758

59+
5860
fn main() {
5961
let vec1 = vec![9, 13, 17, 19];
6062
let vec2 = vec![2, 7, 9, 14, 15, 24, 28, 38];
Lines changed: 46 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,49 @@
1-
package problem0088
1+
pub struct Solution {}
22

3-
// 本题的要求是,把nums1的前m项和nums2的前n项合并,放入nums1中。
4-
func merge(nums1 []int, m int, nums2 []int, n int) {
5-
// 深度复制 nums1
6-
temp := make([]int, m)
7-
copy(temp, nums1)
3+
impl Solution {
4+
pub fn merge(nums1: &mut Vec<i32>, m: i32, nums2: &mut Vec<i32>, n: i32) {
5+
let mut v = vec![];
6+
let mut i: usize = 0;
7+
let mut j: usize = 0;
8+
let _m: usize = if m as usize > nums1.len() {
9+
nums1.len()
10+
} else {
11+
m as usize
12+
};
13+
let _n: usize = if n as usize > nums2.len() {
14+
nums2.len()
15+
} else {
16+
n as usize
17+
};
818

9-
j, k := 0, 0
10-
for i := 0; i < len(nums1); i++ {
11-
// nums2用完了
12-
if k >= n {
13-
nums1[i] = temp[j]
14-
j++
15-
continue
16-
}
17-
// temp 用完了
18-
if j >= m {
19-
nums1[i] = nums2[k]
20-
k++
21-
continue
22-
}
23-
// 比较后,放入
24-
if temp[j] < nums2[k] {
25-
nums1[i] = temp[j]
26-
j++
27-
} else {
28-
nums1[i] = nums2[k]
29-
k++
30-
}
31-
}
19+
while i < _m || j < _n {
20+
if i == _m && j < _n {
21+
v.push(nums2[j]);
22+
j += 1;
23+
continue;
24+
} else if i < _m && j == _n {
25+
v.push(nums1[i]);
26+
i += 1;
27+
continue;
28+
}
29+
30+
let v1 = nums1[i];
31+
let v2 = nums2[j];
32+
33+
if v1 < v2 {
34+
i += 1;
35+
v.push(v1);
36+
} else if v1 > v2 {
37+
j += 1;
38+
v.push(v2);
39+
} else {
40+
i += 1;
41+
j += 1;
42+
v.push(v1);
43+
v.push(v2);
44+
}
45+
}
46+
47+
*nums1 = v;
48+
}
3249
}
Lines changed: 7 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,10 @@
1-
package problem0088
1+
mod merge_sorted_array;
2+
use merge_sorted_array::Solution;
23

3-
import (
4-
"fmt"
5-
"testing"
4+
fn main() {
5+
let mut vec1 = vec![9, 13, 17, 19];
6+
let mut vec2 = vec![2, 7, 9, 14, 15, 24, 28, 38];
67

7-
"github.com/stretchr/testify/assert"
8-
)
9-
10-
type question struct {
11-
para
12-
ans
13-
}
14-
15-
// para 是参数
16-
// one 代表第一个参数
17-
type para struct {
18-
one []int
19-
m int
20-
two []int
21-
n int
22-
}
23-
24-
// ans 是答案
25-
// one 代表第一个答案
26-
type ans struct {
27-
one []int
28-
}
29-
30-
func Test_Problem0088(t *testing.T) {
31-
ast := assert.New(t)
32-
33-
qs := []question{
34-
35-
question{
36-
para{[]int{0}, 0, []int{1}, 1},
37-
ans{[]int{1}},
38-
},
39-
40-
question{
41-
para{[]int{1, 0}, 1, []int{2}, 1},
42-
ans{[]int{1, 2}},
43-
},
44-
45-
question{
46-
para{[]int{}, 0, []int{1}, 1},
47-
ans{[]int{}},
48-
},
49-
50-
question{
51-
para{[]int{1, 3, 5, 7}, 4, []int{2, 4}, 2},
52-
ans{[]int{1, 2, 3, 4}},
53-
},
54-
55-
question{
56-
para{[]int{1, 3, 5, 7}, 4, []int{2, 2}, 2},
57-
ans{[]int{1, 2, 2, 3}},
58-
},
59-
60-
// 如需多个测试,可以复制上方元素。
61-
}
62-
63-
for _, q := range qs {
64-
a, p := q.ans, q.para
65-
fmt.Printf("~~%v~~\n", p)
66-
67-
merge(p.one, p.m, p.two, p.n)
68-
ast.Equal(a.one, p.one, "输入:%v", p)
69-
}
8+
Solution::merge(&mut vec1, 4,&mut vec2, 5);
9+
println!("{:?}", vec1);
7010
}
Lines changed: 43 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,51 @@
1-
package problem0118
1+
pub struct Solution {}
22

3-
func generate(numRows int) [][]int {
4-
res := [][]int{}
5-
if numRows == 0 {
6-
return res
7-
}
3+
// fn factorial(num: i32) -> i32 {
4+
// if num == 0 {
5+
// return 1;
6+
// }
87

9-
res = append(res, []int{1})
10-
if numRows == 1 {
11-
return res
12-
}
8+
// let mut result = 1;
9+
// for i in 1..(num + 1) {
10+
// result *= i;
11+
// }
1312

14-
for i := 1; i < numRows; i++ {
15-
res = append(res, genNext(res[i-1]))
16-
}
13+
// return result;
14+
// }
1715

18-
return res
19-
}
16+
//fn combination(c: i32, m: i32) -> i32 {
17+
// return factorial(c) / (factorial(c - m) * factorial(m));
18+
//}
2019

21-
func genNext(p []int) []int {
22-
res := make([]int, 1, len(p)+1)
23-
res = append(res, p...)
20+
fn combination(c: i32, m: i32) -> i32 {
21+
let mut cv: u128 = 1;
22+
let mut mv: u128 = 1;
23+
for i in (c - m + 1)..(c + 1) {
24+
cv *= i as u128;
25+
}
2426

25-
for i := 0; i < len(res)-1; i++ {
26-
res[i] += res[i+1]
27-
}
27+
for i in 1..(m + 1) {
28+
mv *= i as u128;
29+
}
2830

29-
return res
31+
let r = cv / mv;
32+
return r as i32;
3033
}
34+
35+
impl Solution {
36+
pub fn generate(num_rows: i32) -> Vec<Vec<i32>> {
37+
let mut v = vec![];
38+
39+
let _numrows = num_rows + 1;
40+
41+
for i in 0..num_rows {
42+
let mut sv : Vec<i32> = Vec::new();
43+
for j in 0..(i+1) {
44+
sv.push(combination(i, j));
45+
}
46+
v.push(sv);
47+
}
48+
49+
return v;
50+
}
51+
}

0 commit comments

Comments
 (0)