Skip to content

Commit 10b74d5

Browse files
committed
[LeetCode Sync] Runtime - 1 ms (82.62%), Memory - 21.3 MB (51.24%)
1 parent 44d8ffc commit 10b74d5

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<p>Given an <code>n x n</code> <code>matrix</code> where each of the rows and columns is sorted in ascending order, return <em>the</em> <code>k<sup>th</sup></code> <em>smallest element in the matrix</em>.</p>
2+
3+
<p>Note that it is the <code>k<sup>th</sup></code> smallest element <strong>in the sorted order</strong>, not the <code>k<sup>th</sup></code> <strong>distinct</strong> element.</p>
4+
5+
<p>You must find a solution with a memory complexity better than <code>O(n<sup>2</sup>)</code>.</p>
6+
7+
<p>&nbsp;</p>
8+
<p><strong class="example">Example 1:</strong></p>
9+
10+
<pre>
11+
<strong>Input:</strong> matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8
12+
<strong>Output:</strong> 13
13+
<strong>Explanation:</strong> The elements in the matrix are [1,5,9,10,11,12,13,<u><strong>13</strong></u>,15], and the 8<sup>th</sup> smallest number is 13
14+
</pre>
15+
16+
<p><strong class="example">Example 2:</strong></p>
17+
18+
<pre>
19+
<strong>Input:</strong> matrix = [[-5]], k = 1
20+
<strong>Output:</strong> -5
21+
</pre>
22+
23+
<p>&nbsp;</p>
24+
<p><strong>Constraints:</strong></p>
25+
26+
<ul>
27+
<li><code>n == matrix.length == matrix[i].length</code></li>
28+
<li><code>1 &lt;= n &lt;= 300</code></li>
29+
<li><code>-10<sup>9</sup> &lt;= matrix[i][j] &lt;= 10<sup>9</sup></code></li>
30+
<li>All the rows and columns of <code>matrix</code> are <strong>guaranteed</strong> to be sorted in <strong>non-decreasing order</strong>.</li>
31+
<li><code>1 &lt;= k &lt;= n<sup>2</sup></code></li>
32+
</ul>
33+
34+
<p>&nbsp;</p>
35+
<p><strong>Follow up:</strong></p>
36+
37+
<ul>
38+
<li>Could you solve the problem with a constant memory (i.e., <code>O(1)</code> memory complexity)?</li>
39+
<li>Could you solve the problem in <code>O(n)</code> time complexity? The solution may be too advanced for an interview but you may find reading <a href="http://www.cse.yorku.ca/~andy/pubs/X+Y.pdf" target="_blank">this paper</a> fun.</li>
40+
</ul>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution:
2+
def kthSmallest(self, matrix: List[List[int]], k: int) -> int:
3+
n = len(matrix)
4+
left, right = matrix[0][0], matrix[-1][-1]
5+
6+
while right > left:
7+
mid = (left + right) // 2
8+
if self.checker(matrix, mid, k, n):
9+
right = mid
10+
else:
11+
left = mid + 1
12+
return left
13+
14+
15+
def checker(self, matrix, mid, k, n):
16+
count = 0
17+
i, j = n - 1, 0
18+
while i >= 0 and j < n:
19+
if matrix[i][j] <= mid:
20+
count += i + 1
21+
j += 1
22+
else:
23+
i -= 1
24+
return count >= k

0 commit comments

Comments
 (0)