难度:中等
给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。
请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。
示例:
matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15]
],
k = 8,
方法一:
class Solution:
def kthSmallest(self,k, matrix):
alist = list()
# 二维数组转化为一维数组
for i in matrix:
for j in i:
alist.append(j)
n = len(alist)
#对列表排序
for i in range(n-1):
for j in range(i,n-1):
if alist[j] < alist[j+1]:
alist[j],alist[j+1] = alist[j+1],alist[j]
alist[i],alist[n-1] = alist[n-1],alist[i]
print(alist)
print("第{}个元素为{}".format(k,alist[k-1]))
return alist[k-1]
solution = Solution()
print(solution.kthSmallest(5,matrix))
二维数组转化为一维数组,还可以利用sum。
即代码变为:
class Solution:
def kthSmallest(self,k, matrix):
# 二维数组转化为一维数组
alist = sum(matrix,[])
n = len(alist)
#对列表排序
for i in range(n-1):
for j in range(i,n-1):
if alist[j] < alist[j+1]:
alist[j],alist[j+1] = alist[j+1],alist[j]
alist[i],alist[n-1] = alist[n-1],alist[i]
print(alist)
print("第{}个元素为{}".format(k,alist[k-1]))
return alist[k-1]
solution = Solution()
print(solution.kthSmallest(5,matrix))
运行结果:
[1, 5, 9, 10, 11, 12, 13, 13, 15]
第5个元素为11
比较暴力,直接遍历的数组转为列表后,进行排序,再拿出第k-1个元素。