Skip to content

Commit efa4030

Browse files
committed
feat: add solutions to lcof problem: No.41
面试题41. 数据流中的中位数
1 parent bf6e91e commit efa4030

File tree

3 files changed

+172
-0
lines changed

3 files changed

+172
-0
lines changed

lcof/面试题41. 数据流中的中位数/README.md

+91
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,97 @@ private:
205205
};
206206
```
207207

208+
### **TypeScript**
209+
210+
```ts
211+
class MedianFinder {
212+
public arr: number[] = [];
213+
214+
constructor() {}
215+
216+
addNum(num: number): void {
217+
const { arr } = this;
218+
let l = 0;
219+
let r = arr.length - 1;
220+
while (l <= r) {
221+
const mid = (l + r) >> 1;
222+
if (arr[mid] < num) {
223+
l = mid + 1;
224+
} else {
225+
r = mid - 1;
226+
}
227+
}
228+
arr.splice(l, 0, num);
229+
}
230+
231+
findMedian(): number {
232+
const { arr } = this;
233+
const n = arr.length;
234+
if (n % 2 === 0) {
235+
return (arr[n >> 1] + arr[(n >> 1) - 1]) / 2;
236+
}
237+
return arr[n >> 1];
238+
}
239+
}
240+
241+
/**
242+
* Your MedianFinder object will be instantiated and called as such:
243+
* var obj = new MedianFinder()
244+
* obj.addNum(num)
245+
* var param_2 = obj.findMedian()
246+
*/
247+
```
248+
249+
### **Rust**
250+
251+
```rust
252+
struct MedianFinder {
253+
arr: Vec<i32>,
254+
}
255+
256+
/**
257+
* `&self` means the method takes an immutable reference.
258+
* If you need a mutable reference, change it to `&mut self` instead.
259+
*/
260+
impl MedianFinder {
261+
/** initialize your data structure here. */
262+
fn new() -> Self {
263+
MedianFinder {
264+
arr: vec![]
265+
}
266+
}
267+
268+
fn add_num(&mut self, num: i32) {
269+
let mut l = 0;
270+
let mut r = self.arr.len();
271+
while l < r {
272+
let mid = l + r >> 1;
273+
if self.arr[mid] < num {
274+
l = mid + 1;
275+
} else {
276+
r = mid;
277+
}
278+
}
279+
self.arr.splice(l..l, [num]);
280+
}
281+
282+
fn find_median(&self) -> f64 {
283+
let n = self.arr.len();
284+
match n % 2 == 0 {
285+
true => f64::from(self.arr[n >> 1] + self.arr[(n >> 1) - 1]) / 2.0,
286+
false => f64::from(self.arr[n >> 1]),
287+
}
288+
}
289+
}
290+
291+
/**
292+
* Your MedianFinder object will be instantiated and called as such:
293+
* let obj = MedianFinder::new();
294+
* obj.add_num(num);
295+
* let ret_2: f64 = obj.find_median();
296+
*/
297+
```
298+
208299
### **...**
209300

210301
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
struct MedianFinder {
2+
arr: Vec<i32>,
3+
}
4+
5+
/**
6+
* `&self` means the method takes an immutable reference.
7+
* If you need a mutable reference, change it to `&mut self` instead.
8+
*/
9+
impl MedianFinder {
10+
/** initialize your data structure here. */
11+
fn new() -> Self {
12+
MedianFinder {
13+
arr: vec![]
14+
}
15+
}
16+
17+
fn add_num(&mut self, num: i32) {
18+
let mut l = 0;
19+
let mut r = self.arr.len();
20+
while l < r {
21+
let mid = l + r >> 1;
22+
if self.arr[mid] < num {
23+
l = mid + 1;
24+
} else {
25+
r = mid;
26+
}
27+
}
28+
self.arr.splice(l..l, [num]);
29+
}
30+
31+
fn find_median(&self) -> f64 {
32+
let n = self.arr.len();
33+
match n % 2 == 0 {
34+
true => f64::from(self.arr[n >> 1] + self.arr[(n >> 1) - 1]) / 2.0,
35+
false => f64::from(self.arr[n >> 1]),
36+
}
37+
}
38+
}
39+
40+
/**
41+
* Your MedianFinder object will be instantiated and called as such:
42+
* let obj = MedianFinder::new();
43+
* obj.add_num(num);
44+
* let ret_2: f64 = obj.find_median();
45+
*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class MedianFinder {
2+
public arr: number[] = [];
3+
4+
constructor() {}
5+
6+
addNum(num: number): void {
7+
const { arr } = this;
8+
let l = 0;
9+
let r = arr.length - 1;
10+
while (l <= r) {
11+
const mid = (l + r) >> 1;
12+
if (arr[mid] < num) {
13+
l = mid + 1;
14+
} else {
15+
r = mid - 1;
16+
}
17+
}
18+
arr.splice(l, 0, num);
19+
}
20+
21+
findMedian(): number {
22+
const { arr } = this;
23+
const n = arr.length;
24+
if (n % 2 === 0) {
25+
return (arr[n >> 1] + arr[(n >> 1) - 1]) / 2;
26+
}
27+
return arr[n >> 1];
28+
}
29+
}
30+
31+
/**
32+
* Your MedianFinder object will be instantiated and called as such:
33+
* var obj = new MedianFinder()
34+
* obj.addNum(num)
35+
* var param_2 = obj.findMedian()
36+
*/

0 commit comments

Comments
 (0)