-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathkthSmallest.go
More file actions
43 lines (36 loc) · 816 Bytes
/
Copy pathkthSmallest.go
File metadata and controls
43 lines (36 loc) · 816 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/* https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth smallest element in the matrix.
Note that it is the kth smallest element in the sorted order, not the kth distinct element.
Example:
matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15]
],
k = 8,
return 13.
Note:
You may assume k is always valid, 1 ≤ k ≤ n2.
*/
package lbs
func kthSmallest(matrix [][]int, k int) int {
n := len(matrix)
lo, hi := matrix[0][0], matrix[n-1][n-1]+1
for lo < hi {
mid := lo + (hi-lo)/2
count := 0
j := n - 1
for i := 0; i < n; i++ {
for j >= 0 && mid < matrix[i][j] {
j--
}
count += j + 1
}
if count < k {
lo = mid + 1
} else {
hi = mid
}
}
return lo
}