Skip to content

Commit 112d07c

Browse files
committed
src/bin/kth-smallest-element-in-a-sorted-matrix.rs
1 parent 6714072 commit 112d07c

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
fn main() {}
2+
3+
struct Solution;
4+
5+
impl Solution {
6+
/// 二分查找法?
7+
pub fn kth_smallest(matrix: Vec<Vec<i32>>, k: i32) -> i32 {
8+
let (mut left, mut right) = (matrix[0][0], matrix[matrix.len() - 1][matrix.len() - 1]);
9+
10+
while left < right {
11+
let mid = left + (right - left) / 2;
12+
let num = Self::get_number(&matrix[..], mid);
13+
if num >= k {
14+
right = mid;
15+
} else {
16+
left = mid + 1;
17+
}
18+
}
19+
left
20+
}
21+
22+
/// 求个数
23+
fn get_number(matrix: &[Vec<i32>], mid: i32) -> i32 {
24+
let (mut i, mut j) = (matrix.len() as i32 - 1, 0i32);
25+
let mut num = 0;
26+
27+
while i >= 0 && j < matrix.len() as i32 {
28+
if matrix[i as usize][j as usize] <= mid {
29+
num += i as i32 + 1;
30+
j += 1;
31+
} else {
32+
i -= 1;
33+
}
34+
}
35+
36+
num
37+
}
38+
}

0 commit comments

Comments
 (0)